Why &

How To Contribute

to Elixir and Phoenix

Wendy Smoak / @wsmoak



ElixirConf 2015

wsmoak.net -> Talks

About Me

Apache

Elixir!

Where

Why

Ask Questions

Answer Questions

Write It Down

What To Do

Reproduce Issues

Make Improvements

Add Features

Mailing Lists

(Google Groups)

Slack

Ask Questions

IRC

Stack Overflow

Reddit

Reply

Gist

Wiki

Answer Questions

Blog

Docs

Official Docs

(and scroll down...)

I think there's an extra space...

Reproduce an Issue

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
            

  # 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
            

$ mix deps.get
            

New Project

Phoenix Installer


$ 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
            

$ mix phoenix.new --version
            

Phoenix v1.0.2
            

$ rm ~/.mix/archives/phoenix_new*
            

$ mix phoenix.new test_project --dev
            

$ mix phoenix.new test_project --dev
            

$ mix phoenix.new test_project --dev
            

$ mix phoenix.new test_project --dev
            

* 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
$
            

$ 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
            


  # 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
            


  # 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
            

$ mix phoenix.server
            

Elixir

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
$
            

$ 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
            

$ which elixir

/Users/wsmoak/projects/elixir/bin/elixir
            

$ elixir -v

Elixir 1.2.0-dev
            

Test a Release Candidate


$ 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>
$
            

$ cd elixir-v1.1.0-rc.0

$ make clean test
            

Build the Docs


$ cd ..
            

$ 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
            

$ ../elixir/bin/mix do deps.get, compile
            

$ ../elixir/bin/mix do deps.get, compile
            

* 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
$
            

$ 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
            

Fix an Issue!

Add a Feature!

(Maybe...)

Thanks!

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's
Getting 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