How To Contribute – to Elixir and Phoenix – About Me



How To Contribute – to Elixir and Phoenix – About Me

0 0


htcep

How To Contribute to Elixir and Phoenix

On Github wsmoak / htcep

Why &

How To Contribute

to Elixir and Phoenix

Wendy Smoak / @wsmoak

ElixirConf 2015

Welcome. Excited To Be Here. How To Contribute Beginner Level Talk Never Contributed Before

wsmoak.net -> Talks

Lots of Shell Commands & Output Don't Try To Write Them Down Blog -> Talks page Would Love To Run Workshop

About Me

Apache

2005 The Apache Software Foundation Asking, Answering, Docs Java Fun, Skipped Ruby Time Away From Tech Looking for Something New

Elixir!

July Asking, Answering, Docs

Where

Project culture Toxic personalities
Ron Jeffries Signer of Agile Mainfesto

Why

You need something / scratch itch Learn something new Make Friends Build Resume

Ask Questions

Answer Questions

Write It Down

What To Do

Reproduce Issues

Make Improvements

Add Features

Writing - important for a Language/Framework this young Features as separate projects

Mailing Lists

(Google Groups)

Slack

Ask Questions

IRC

Stack Overflow

Reddit

Use the right list: talk vs. core CodeWall English that I'm aware of - Surely Duplicated

Reply

Gist

Wiki

Answer Questions

Blog

Docs

Slack IRC - Messages Disappear Blog - Jeramy Singleton learned from Chris -> Elixir Radar

Official Docs

Make Your First Contribution To The Official Documentation Without Ever Leaving Your Browser [10 min mark]
OSS Projects Compete for Your Leisure Time Get Up 1 Hour Early To Learn Get Stuck. Wander Away. We May Lose That Contributor
Magic Button "Edit the file in your fork of this project" or "Fork this project and edit the file"
Submitting a change will write to new branch in your fork

(and scroll down...)

Preview
Propose
Compare Branches
if fixing example,explain what was confusing
Now your Pull Request exists
And it's in the list
And if all goes well it gets merged
And you get colored hearts in a comment
listed as contributor
celebrate on twitter

I think there's an extra space...

reality: they ask for changes "squash your commits" ask for help email me

Reproduce an Issue

17:30 minute mark

As written

On master

Phoenix

Existing Project

  # Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, "~> 0.14"},
     {:phoenix_ecto, "~> 0.5"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 1.1"},
     {:phoenix_live_reload, "~> 0.4", only: :dev},
     {:cowboy, "~> 1.0"}]
  end
            
mix.exs file
  # Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, github: "phoenixframework/phoenix"},
     {:phoenix_ecto, "~> 0.5"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 1.1"},
     {:phoenix_live_reload, "~> 0.4", only: :dev},
     {:cowboy, "~> 1.0"}]
  end
            
Point Phoenix dependency at GitHub
$ mix deps.get
            
Need to run mix deps.get to fetch the code

New Project

Phoenix Installer

the phoenix.new Mix Task
Readme Is In Source
$ git clone https://github.com/phoenixframework/phoenix.git
Cloning into 'phoenix'...
remote: Counting objects: 19702, done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 19702 (delta 13), reused 0 (delta 0), pack-reused 19649
Receiving objects: 100% (19702/19702), 3.65 MiB | 636.00 KiB/s, done.
Resolving deltas: 100% (12877/12877), done.
Checking connectivity... done.
$
$ cd phoenix/installer
Must be in this directory Will not work elsewhere
$ mix phoenix.new --version
Phoenix v1.0.2
Which code is this?
$ rm ~/.mix/archives/phoenix_new*
Must delete any installed version.
$ mix phoenix.new test_project --dev
After deleting, create a project
$ mix phoenix.new test_project --dev
The same phoenix.new mix command
$ mix phoenix.new test_project --dev
The usual, name of the project
$ mix phoenix.new test_project --dev
Using the --dev switch
* creating test_project/config/config.exs
* creating test_project/config/dev.exs
* creating test_project/config/prod.exs
* creating test_project/config/prod.secret.exs
* creating test_project/config/test.exs
* creating test_project/lib/test_project.ex
* creating test_project/lib/test_project/endpoint.ex
* creating test_project/test/controllers/page_controller_test.exs
* creating test_project/test/views/error_view_test.exs
* creating test_project/test/views/page_view_test.exs
* creating test_project/test/views/layout_view_test.exs
* creating test_project/test/support/conn_case.ex
* creating test_project/test/support/channel_case.ex
* creating test_project/test/test_helper.exs
* creating test_project/web/channels/user_socket.ex
* creating test_project/web/controllers/page_controller.ex
* creating test_project/web/templates/layout/app.html.eex
* creating test_project/web/templates/page/index.html.eex
* creating test_project/web/views/error_view.ex
* creating test_project/web/views/layout_view.ex
* creating test_project/web/views/page_view.ex
* creating test_project/web/router.ex
* creating test_project/web/web.ex
* creating test_project/mix.exs
* creating test_project/README.md
* creating test_project/lib/test_project/repo.ex
* creating test_project/test/support/model_case.ex
* creating test_project/priv/repo/seeds.exs
* creating test_project/.gitignore
* creating test_project/brunch-config.js
* creating test_project/package.json
* creating test_project/web/static/css/app.css
* creating test_project/web/static/js/app.js
* creating test_project/web/static/js/socket.js
* creating test_project/web/static/assets/robots.txt
* creating test_project/web/static/assets/images/phoenix.png
* creating test_project/web/static/assets/favicon.ico

Fetch and install dependencies? [Yn] Y
* running npm install && node node_modules/brunch/bin/brunch build
* running mix deps.get

We are all set! Run your Phoenix application:

    $ cd test_project
    $ mix ecto.create
    $ mix phoenix.server

You can also run your app inside IEx (Interactive Elixir) as:

    $ iex -S mix phoenix.server
$
Normal phoenix.new output to Fetch and install dependencies? Y
$ cd test_project

$ cat mix.exs
defmodule TestProject.Mixfile do
  use Mix.Project

  def project do
    [app: :test_project,
     version: "0.0.1",
     elixir: "~> 1.0",
     elixirc_paths: elixirc_paths(Mix.env),
     compilers: [:phoenix] ++ Mix.compilers,
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type `mix help compile.app` for more information
  def application do
    [mod: {TestProject, []},
     applications: [:phoenix, :phoenix_html, :cowboy, :logger,
                    :phoenix_ecto, :postgrex]]
  end

  # Specifies which paths to compile per environment
  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
  defp elixirc_paths(_),     do: ["lib", "web"]

  # Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, path: "../..", override: true},
     {:phoenix_ecto, "~> 1.1"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.1"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:cowboy, "~> 1.0"}]
  end
end
drop into test_project directory look at mix.exs
# Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, path: "../..", override: true},
     {:phoenix_ecto, "~> 1.1"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.1"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:cowboy, "~> 1.0"}]
  end
relative path!
# Specifies your project dependencies
  #
  # Type `mix help deps` for examples and options
  defp deps do
    [{:phoenix, path: "../..", override: true},
     {:phoenix_ecto, "~> 1.1"},
     {:postgrex, ">= 0.0.0"},
     {:phoenix_html, "~> 2.1"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:cowboy, "~> 1.0"}]
  end
make sure no other dep sets the version to something else
$ mix phoenix.server
Now go reproduce your issue

Elixir

What if the issue wasn't in Phoenix, but was in the language? 24:00 minute mark

On master

$ git clone https://github.com/elixir-lang/elixir.git
Cloning into 'elixir'...
remote: Counting objects: 82650, done.
remote: Compressing objects: 100% (76/76), done.
remote: Total 82650 (delta 23), reused 0 (delta 0), pack-reused 82573
Receiving objects: 100% (82650/82650), 29.89 MiB | 1.17 MiB/s, done.
Resolving deltas: 100% (45771/45771), done.
Checking connectivity... done.
$
$ cd elixir

$ make clean test
cd lib/elixir && "/Users/wsmoak/projects/elixir/rebar" clean
==> elixir (clean)
rm -rf ebin
rm -rf lib/*/ebin
rm -rf lib/elixir/test/ebin
rm -rf lib/*/tmp
rm -rf lib/mix/test/fixtures/git_repo
rm -rf lib/mix/test/fixtures/deps_on_git_repo
rm -rf lib/mix/test/fixtures/git_rebar
rm -rf lib/elixir/src/elixir.app.src
/Applications/Xcode.app/Contents/Developer/usr/bin/make clean_man
rm -f man/elixir.1
rm -f man/iex.1
==> elixir (compile)
Compiled src/elixir_parser.yrl
Compiled src/elixir_aliases.erl
Compiled src/elixir_bitstring.erl
Compiled src/elixir.erl
Compiled src/elixir_bootstrap.erl
Compiled src/elixir_code_server.erl
Compiled src/elixir_config.erl
Compiled src/elixir_counter.erl
Compiled src/elixir_clauses.erl
Compiled src/elixir_compiler.erl
Compiled src/elixir_def_defaults.erl
Compiled src/elixir_def_overridable.erl
Compiled src/elixir_env.erl
Compiled src/elixir_dispatch.erl
Compiled src/elixir_def.erl
Compiled src/elixir_errors.erl
Compiled src/elixir_exp_clauses.erl
Compiled src/elixir_fn.erl
Compiled src/elixir_exp.erl
Compiled src/elixir_import.erl
Compiled src/elixir_for.erl
Compiled src/elixir_lexical.erl
Compiled src/elixir_locals.erl
Compiled src/elixir_map.erl
Compiled src/elixir_interpolation.erl
Compiled src/elixir_module.erl
Compiled src/elixir_rewrite.erl
Compiled src/elixir_scope.erl
Compiled src/elixir_sup.erl
Compiled src/elixir_quote.erl
Compiled src/elixir_translator.erl
Compiled src/elixir_try.erl
Compiled src/elixir_utils.erl
Compiled src/elixir_tokenizer.erl
Compiled src/elixir_parser.erl
==> bootstrap (compile)
Compiled lib/elixir/lib/kernel.ex
Compiled lib/elixir/lib/macro/env.ex
Compiled lib/elixir/lib/keyword.ex
Compiled lib/elixir/lib/module.ex
Compiled lib/elixir/lib/list.ex
Compiled lib/elixir/lib/macro.ex
Compiled lib/elixir/lib/code.ex
Compiled lib/elixir/lib/module/locals_tracker.ex
Compiled lib/elixir/lib/kernel/def.ex
Compiled lib/elixir/lib/kernel/typespec.ex
Compiled lib/elixir/lib/behaviour.ex
Compiled lib/elixir/lib/exception.ex
Compiled lib/elixir/lib/protocol.ex
Compiled lib/elixir/lib/stream/reducers.ex
Compiled lib/elixir/lib/enum.ex
Compiled lib/elixir/lib/inspect/algebra.ex
Compiled lib/elixir/lib/inspect.ex
Compiled lib/elixir/lib/range.ex
Compiled lib/elixir/lib/regex.ex
Compiled lib/elixir/lib/string.ex
Compiled lib/elixir/lib/string/chars.ex
Compiled lib/elixir/lib/io.ex
Compiled lib/elixir/lib/path.ex
Compiled lib/elixir/lib/file.ex
Compiled lib/elixir/lib/system.ex
Compiled lib/elixir/lib/kernel/cli.ex
Compiled lib/elixir/lib/kernel/error_handler.ex
Compiled lib/elixir/lib/kernel/parallel_compiler.ex
Compiled lib/elixir/lib/kernel/lexical_tracker.ex
==> elixir (compile)
Compiled lib/kernel.ex
Compiled lib/atom.ex
Compiled lib/bitwise.ex
Compiled lib/behaviour.ex
Compiled lib/access.ex
Compiled lib/agent.ex
Compiled lib/application.ex
Compiled lib/code.ex
Compiled lib/collectable.ex
Compiled lib/float.ex
Compiled lib/base.ex
lib/file/stream.ex:68: warning: behaviour Enumerable undefined
Compiled lib/file/stream.ex
Compiled lib/dict.ex
lib/gen_event/stream.ex:58: warning: behaviour Enumerable undefined
Compiled lib/gen_event/stream.ex
Compiled lib/gen_server.ex
Compiled lib/agent/server.ex
Compiled lib/integer.ex
Compiled lib/file.ex
Compiled lib/io.ex
Compiled lib/hash_dict.ex
Compiled lib/inspect/algebra.ex
Compiled lib/io/ansi.ex
Compiled lib/kernel/def.ex
Compiled lib/io/stream.ex
Compiled lib/kernel/error_handler.ex
Compiled lib/kernel/lexical_tracker.ex
Compiled lib/io/ansi/docs.ex
Compiled lib/kernel/parallel_require.ex
Compiled lib/kernel/parallel_compiler.ex
Compiled lib/kernel/cli.ex
Compiled lib/kernel/special_forms.ex
Compiled lib/inspect.ex
Compiled lib/keyword.ex
Compiled lib/list.ex
Compiled lib/macro/env.ex
Compiled lib/map.ex
Compiled lib/enum.ex
Compiled lib/kernel/typespec.ex
Compiled lib/list/chars.ex
Compiled lib/exception.ex
Compiled lib/node.ex
Compiled lib/module/locals_tracker.ex
Compiled lib/port.ex
Compiled lib/option_parser.ex
Compiled lib/module.ex
Compiled lib/path.ex
Compiled lib/range.ex
Compiled lib/process.ex
Compiled lib/record/extractor.ex
Compiled lib/macro.ex
Compiled lib/record.ex
Compiled lib/stream/reducers.ex
Compiled lib/protocol.ex
Compiled lib/set.ex
Compiled lib/file/stat.ex
Compiled lib/kernel.ex
Compiled lib/regex.ex
Compiled lib/map_set.ex
Compiled lib/hash_set.ex
Compiled lib/supervisor/default.ex
Compiled lib/gen_event.ex
Compiled lib/string_io.ex
Compiled lib/supervisor.ex
Compiled lib/task/supervised.ex
Compiled lib/supervisor/spec.ex
Compiled lib/string/chars.ex
Compiled lib/tuple.ex
Compiled lib/task/supervisor.ex
Compiled lib/task.ex
Compiled lib/system.ex
Compiled lib/uri.ex
Compiled lib/string.ex
Compiled lib/stream.ex
Compiled lib/version.ex
==> unicode (compile)
Embedding the Unicode database... (this may take a while)
Compiled unicode/unicode.ex
==> elixir (compile)
==> eex (compile)
Compiled lib/eex/engine.ex
Compiled lib/eex/smart_engine.ex
Compiled lib/eex/tokenizer.ex
Compiled lib/eex/compiler.ex
Compiled lib/eex.ex
==> mix (compile)
Compiled lib/mix/config/agent.ex
Compiled lib/mix/archive.ex
Compiled lib/mix.ex
Compiled lib/mix/compilers/erlang.ex
Compiled lib/mix/cli.ex
Compiled lib/mix/compilers/elixir.ex
Compiled lib/mix/dep/umbrella.ex
Compiled lib/mix/config.ex
Compiled lib/mix/dep/lock.ex
Compiled lib/mix/generator.ex
Compiled lib/mix/dep/converger.ex
Compiled lib/mix/hex.ex
Compiled lib/mix/public_key.ex
Compiled lib/mix/local.ex
Compiled lib/mix/remote_converger.ex
Compiled lib/mix/project_stack.ex
Compiled lib/mix/dep.ex
Compiled lib/mix/dep/loader.ex
Compiled lib/mix/rebar.ex
Compiled lib/mix/scm.ex
Compiled lib/mix/scm/path.ex
Compiled lib/mix/project.ex
Compiled lib/mix/exceptions.ex
Compiled lib/mix/shell.ex
Compiled lib/mix/dep/fetcher.ex
Compiled lib/mix/state.ex
Compiled lib/mix/shell/process.ex
Compiled lib/mix/shell/io.ex
Compiled lib/mix/scm/git.ex
Compiled lib/mix/tasks_server.ex
Compiled lib/mix/task.ex
Compiled lib/mix/tasks/local.ex
Compiled lib/mix/tasks/local.rebar.ex
Compiled lib/mix/tasks/local.public_keys.ex
Compiled lib/mix/tasks/loadconfig.ex
Compiled lib/mix/tasks/loadpaths.ex
Compiled lib/mix/tasks/run.ex
Compiled lib/mix/tasks/local.hex.ex
Compiled lib/mix/tasks/deps.update.ex
Compiled lib/mix/tasks/deps.unlock.ex
Compiled lib/mix/tasks/test.ex
Compiled lib/mix/tasks/iex.ex
Compiled lib/mix/tasks/do.ex
Compiled lib/mix/tasks/profile.fprof.ex
Compiled lib/mix/tasks/deps.loadpaths.ex
Compiled lib/mix/tasks/deps.ex
Compiled lib/mix/tasks/help.ex
Compiled lib/mix/tasks/deps.get.ex
Compiled lib/mix/tasks/deps.clean.ex
Compiled lib/mix/utils.ex
Compiled lib/mix/tasks/deps.check.ex
Compiled lib/mix/tasks/compile.yecc.ex
Compiled lib/mix/tasks/escript.build.ex
Compiled lib/mix/tasks/compile.ex
Compiled lib/mix/tasks/deps.compile.ex
Compiled lib/mix/tasks/compile.erlang.ex
Compiled lib/mix/tasks/compile.leex.ex
Compiled lib/mix/tasks/compile.protocols.ex
Compiled lib/mix/tasks/cmd.ex
Compiled lib/mix/tasks/compile.all.ex
Compiled lib/mix/tasks/clean.ex
Compiled lib/mix/tasks/compile.elixir.ex
Compiled lib/mix/tasks/archive.ex
Compiled lib/mix/tasks/archive.uninstall.ex
Compiled lib/mix/tasks/archive.build.ex
Compiled lib/mix/tasks/compile.app.ex
Compiled lib/mix/tasks/archive.install.ex
Compiled lib/mix/tasks/app.start.ex
Compiled lib/mix/tasks/new.ex
Generated mix app
==> ex_unit (compile)
Compiled lib/ex_unit/case_template.ex
Compiled lib/ex_unit/capture_log.ex
Compiled lib/ex_unit/capture_io.ex
Compiled lib/ex_unit/callbacks.ex
Compiled lib/ex_unit/case.ex
Compiled lib/ex_unit/event_manager.ex
Compiled lib/ex_unit/on_exit_handler.ex
Compiled lib/ex_unit/runner_stats.ex
Compiled lib/ex_unit.ex
Compiled lib/ex_unit/filters.ex
Compiled lib/ex_unit/server.ex
Compiled lib/ex_unit/assertions.ex
Compiled lib/ex_unit/formatter.ex
Compiled lib/ex_unit/runner.ex
Compiled lib/ex_unit/doc_test.ex
Compiled lib/ex_unit/cli_formatter.ex
Generated ex_unit app
==> logger (compile)
Compiled lib/logger/app.ex
Compiled lib/logger/backends/console.ex
Compiled lib/logger/formatter.ex
Compiled lib/logger/config.ex
Compiled lib/logger/utils.ex
Compiled lib/logger.ex
Compiled lib/logger/translator.ex
Compiled lib/logger/watcher.ex
Compiled lib/logger/error_handler.ex
Generated logger app
Generated eex app
==> iex (compile)
Compiled lib/iex/remsh.ex
Compiled lib/iex/app.ex
Compiled lib/iex/cli.ex
Compiled lib/iex.ex
Compiled lib/iex/history.ex
Compiled lib/iex/evaluator.ex
Compiled lib/iex/config.ex
Compiled lib/iex/autocomplete.ex
Compiled lib/iex/server.ex
Compiled lib/iex/helpers.ex
Compiled lib/iex/introspection.ex
Generated iex app
==> elixir (eunit)
  All 199 tests passed.

==> elixir (exunit)
................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Finished in 13.8 seconds (9.2s on load, 4.6s on tests)
2016 tests, 0 failures

Randomized with seed 489273
==> ex_unit (exunit)
.....................................................................................................................................................................

Finished in 2.3 seconds (1.2s on load, 1.0s on tests)
165 tests, 0 failures

Randomized with seed 838692
==> logger (exunit)
.......................................................................................

Finished in 1.2 seconds (0.8s on load, 0.3s on tests)
87 tests, 0 failures

Randomized with seed 149832
==> doctest (exunit)
......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Finished in 10.8 seconds (10.5s on load, 0.2s on tests)
870 tests, 0 failures

Randomized with seed 582651
==> mix (exunit)
................................................................................................................................................................................................................................................................................

Finished in 31.1 seconds (2.7s on load, 28.3s on tests)
272 tests, 0 failures

Randomized with seed 157277
==> eex (exunit)
.....................................................................

Finished in 0.6 seconds (0.6s on load, 0.04s on tests)
69 tests, 0 failures

Randomized with seed 581809
==> iex (exunit)
..............................................................................

Finished in 1.6 seconds (0.6s on load, 0.9s on tests)
78 tests, 0 failures

Randomized with seed 719841
$
Randomized with seed 157277
==> eex (exunit)
.....................................................................

Finished in 0.6 seconds (0.6s on load, 0.04s on tests)
69 tests, 0 failures

Randomized with seed 581809
==> iex (exunit)
..............................................................................

Finished in 1.6 seconds (0.6s on load, 0.9s on tests)
78 tests, 0 failures

Randomized with seed 719841
$
No Syntax Highlighting Dots should all be green If Not Open Issue
$ export ELIXIR_HOME=/Users/wsmoak/projects/elixir/bin

$ export PATH=$ELIXIR_HOME:$PATH
$ export ELIXIR_HOME=/Users/wsmoak/projects/elixir/bin

$ export PATH=$ELIXIR_HOME:$PATH
Put ELIXIR_HOME in front
$ which elixir

/Users/wsmoak/projects/elixir/bin/elixir
$ elixir -v

Elixir 1.2.0-dev

Test a Release Candidate

Slight detour...
$ git clone --branch v1.1.0-rc.0 \
https://github.com/elixir-lang/elixir.git \
elixir-v1.1.0-rc.0
Cloning into 'elixir-v1.1.0-rc.0'...
remote: Counting objects: 83050, done.
remote: Compressing objects: 100% (113/113), done.
remote: Total 83050 (delta 54), reused 0 (delta 0), pack-reused 82937
Receiving objects: 100% (83050/83050), 30.51 MiB | 1.20 MiB/s, done.
Resolving deltas: 100% (46032/46032), done.
Checking connectivity... done.
Note: checking out '0e3c06b03149022b980e69872003d401c4788fea'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>
$
ominous warning... can be safely ignored
$ cd elixir-v1.1.0-rc.0

$ make clean test
Same steps from here -- build and fix up environment Report back either way!

Build the Docs

If you're going to submit a patch for the language, surely you will have documentation! Here's how to build it. 30:00 minute mark
$ cd ..
            
We are in elixir dir need to be in parent dir
$ git clone git://github.com/elixir-lang/ex_doc.git
            
Cloning into 'ex_doc'...
remote: Counting objects: 7195, done.
remote: Compressing objects: 100% (334/334), done.
remote: Total 7195 (delta 154), reused 0 (delta 0), pack-reused 6859
Receiving objects: 100% (7195/7195), 2.32 MiB | 145.00 KiB/s, done.
Resolving deltas: 100% (3742/3742), done.
Checking connectivity... done.
$
            
$ cd ex_doc

$ ../elixir/bin/mix do deps.get, compile
            
$ ../elixir/bin/mix do deps.get, compile
            
executes the mix we just built
$ ../elixir/bin/mix do deps.get, compile
            
the 'do' task takes a comma delimited list of tasks
$ ../elixir/bin/mix do deps.get, compile
the list of tasks to execute
* Getting markdown (https://github.com/devinus/markdown.git)
Cloning into '/Users/wsmoak/projects/ex_doc/deps/markdown'...
remote: Counting objects: 99, done.
remote: Total 99 (delta 0), reused 0 (delta 0), pack-reused 99
Checking connectivity... done.
* Getting hoedown (https://github.com/hoedown/hoedown.git)
Cloning into '/Users/wsmoak/projects/ex_doc/deps/hoedown'...
remote: Counting objects: 2940, done.
remote: Total 2940 (delta 0), reused 0 (delta 0), pack-reused 2940
Receiving objects: 100% (2940/2940), 913.78 KiB | 1.10 MiB/s, done.
Resolving deltas: 100% (1786/1786), done.
Checking connectivity... done.
Running dependency resolution
* Getting earmark (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/earmark-0.1.17.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/earmark-0.1.17.tar)
* Getting excoveralls (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/excoveralls-0.3.11.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/excoveralls-0.3.11.tar)
* Getting hackney (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/hackney-1.3.2.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/hackney-1.3.2.tar)
* Getting exjsx (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/exjsx-3.2.0.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/exjsx-3.2.0.tar)
* Getting jsx (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/jsx-2.6.2.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/jsx-2.6.2.tar)
* Getting ssl_verify_hostname (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/ssl_verify_hostname-1.0.5.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/ssl_verify_hostname-1.0.5.tar)
* Getting idna (Hex package)
Checking package (https://s3.amazonaws.com/s3.hex.pm/tarballs/idna-1.0.2.tar)
Using locally cached package
Unpacked package tarball (/Users/wsmoak/.hex/packages/idna-1.0.2.tar)
==> earmark
Compiled lib/earmark/cli.ex
Compiled lib/earmark/context.ex
Compiled lib/earmark.ex
Compiled lib/earmark/helpers.ex
Compiled lib/earmark/inline.ex
Compiled lib/earmark/parser.ex
Compiled lib/earmark/line.ex
Compiled lib/earmark/html_renderer.ex
Compiled lib/earmark/block.ex
Generated earmark app
==> ex_doc
Compiled lib/ex_doc/markdown/earmark.ex
Compiled lib/ex_doc/markdown/hoedown.ex
Compiled lib/ex_doc/markdown.ex
Compiled lib/ex_doc/cli.ex
Compiled lib/ex_doc/markdown/pandoc.ex
Compiled lib/ex_doc.ex
Compiled lib/mix/tasks/docs.ex
Compiled lib/ex_doc/formatter/html.ex
Compiled lib/ex_doc/retriever.ex
Compiled lib/ex_doc/formatter/html/templates.ex
Compiled lib/ex_doc/formatter/html/autolink.ex
Generated ex_doc app
$
            
Now ExDoc is built and we can
$ cd ../elixir

$ make docs
            
==> elixir (compile)
==> ex_doc (elixir)
bin/elixir ../ex_doc/bin/ex_doc "Elixir" "1.2.0-dev" "lib/elixir/ebin"
-m "Kernel" -u "https://github.com/elixir-lang/elixir" --source-ref
"7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/elixir -p
http://elixir-lang.org/docs.html
==> ex_doc (eex)
bin/elixir ../ex_doc/bin/ex_doc "EEx" "1.2.0-dev" "lib/eex/ebin" -m
"EEx" -u "https://github.com/elixir-lang/elixir" --source-ref
"7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/eex -p
http://elixir-lang.org/docs.html
==> ex_doc (mix)
bin/elixir ../ex_doc/bin/ex_doc "Mix" "1.2.0-dev" "lib/mix/ebin" -m
"Mix" -u "https://github.com/elixir-lang/elixir" --source-ref
"7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/mix -p
http://elixir-lang.org/docs.html
==> ex_doc (iex)
bin/elixir ../ex_doc/bin/ex_doc "IEx" "1.2.0-dev" "lib/iex/ebin" -m
"IEx" -u "https://github.com/elixir-lang/elixir" --source-ref
"7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/iex -p
http://elixir-lang.org/docs.html
==> ex_doc (ex_unit)
bin/elixir ../ex_doc/bin/ex_doc "ExUnit" "1.2.0-dev" "lib/ex_unit/ebin" -m
 "ExUnit" -u "https://github.com/elixir-lang/elixir" --source-ref
 "7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/ex_unit -p
 http://elixir-lang.org/docs.html
==> ex_doc (logger)
bin/elixir ../ex_doc/bin/ex_doc "Logger" "1.2.0-dev" "lib/logger/ebin" -m
 "Logger" -u "https://github.com/elixir-lang/elixir" --source-ref
 "7ba752e0381d24361347d2071527a2e6874d97ee"  -o doc/logger -p
 http://elixir-lang.org/docs.html
$ ls doc
eex elixir  ex_unit iex logger  mix

$ open doc/elixir/index.html
            
Design contributions font, font weight, layout

Fix an Issue!

Add a Feature!

(Maybe...)

Whatever Skills You Bring Or Want To Learn You Are Welcome Here

Thanks!

ElixirConf and Jim for inviting me Chargify for paying for my travel and time

Resources

http://wsmoak.net/2015/09/08/building-elixir-from-source.html

http://wsmoak.net/2015/08/17/phoenix-bleeding-edge.html

http://www.jeramysingleton.com/phoenix-templates-are-just-functions/

Find me on...

- elixir-talk or phoenix-talk - wsmoak@gmail.com - http://wsmoak.net - @wsmoak - wsmoak on IRC and Slack

Have fun

CREDITS

Adapted from Laura Thomson'sGetting Started to Contributing to Open Source

https://www.youtube.com/watch?v=gpWTIrb5cNg

LICENSE

CC BY-NC-SA

Bonus

Change the version number

$ git grep 1.1.0-beta
CHANGELOG.md:## v1.1.0-beta (2015-09-05)
VERSION:1.1.0-beta
src/elixir.app.src: {vsn, "1.1.0-beta"},
$ vi -b VERSION
1.1.0-20150912
~
~
~
~
~
:wq
$ vi src/elixir.app.src
{application, elixir,
[{description, "elixir"},
{vsn, "1.1.0-20150912"}
 {modules, [
        elixir
  ]},
 {registered, [elixir_config, elixir_code_server]},
 {applications, [kernel,stdlib,compiler]},
 {mod, {elixir,[]}},
 {env, [{ansi_enabled, false}]}
]}.
~
~
:wq
$ git diff

diff --git a/VERSION b/VERSION
index 2ff3577..f40650e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1.0-beta
\ No newline at end of file
+1.1.0-20150912
\ No newline at end of file
diff --git a/src/elixir.app.src b/src/elixir.app.src
index 3c099d4..1b97b77 100644
--- a/src/elixir.app.src
+++ b/src/elixir.app.src
@@ -1,6 +1,6 @@
 {application, elixir,
 [{description, "elixir"},
- {vsn, "1.1.0-beta"},
+ {vsn, "1.1.0-20150912"},
  {modules, [
  elixir
   ]},
$ git diff

diff --git a/VERSION b/VERSION
index 2ff3577..f40650e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1.0-beta
\ No newline at end of file
+1.1.0-20150912
\ No newline at end of file
diff --git a/src/elixir.app.src b/src/elixir.app.src
index 3c099d4..1b97b77 100644
--- a/src/elixir.app.src
+++ b/src/elixir.app.src
@@ -1,6 +1,6 @@
 {application, elixir,
 [{description, "elixir"},
- {vsn, "1.1.0-beta"},
+ {vsn, "1.1.0-20150912"},
  {modules, [
  elixir
   ]},
$ make clean test

[...]
$ elixir -v

Elixir 1.1.0-20150912
Why & How To Contribute to Elixir and Phoenix Wendy Smoak / @wsmoak ElixirConf 2015 Welcome. Excited To Be Here. How To Contribute Beginner Level Talk Never Contributed Before