Giter Site home page Giter Site logo

mirego / elixir-boilerplate Goto Github PK

View Code? Open in Web Editor NEW
1.1K 50.0 82.0 1.52 MB

⚗ The stable base upon which we build our Elixir projects at Mirego.

Home Page: https://open.mirego.com

License: BSD 3-Clause "New" or "Revised" License

Elixir 74.95% Dockerfile 2.04% Makefile 3.54% CSS 0.56% JavaScript 0.93% Shell 4.13% HTML 13.85%
elixir elixir-lang elixir-phoenix ecto plug otp docker gettext dialyzer credo

elixir-boilerplate's Introduction


This repository is the stable base upon which we build our Elixir projects at Mirego.
We want to share it with the world so you can build awesome Elixir applications too.

Introduction

To learn more about why we created and maintain this boilerplate project, read our blog post.

Content

This boilerplate comes with batteries included, you’ll find:

Usage

With GitHub template

  1. Click on the Use this template button to create a new repository
  2. Clone your newly created project (git clone https://github.com/you/repo.git)
  3. Run the boilerplate setup script (./boilerplate-setup.sh YourProjectName)
  4. Commit the changes (git commit -a -m "Rename elixir-boilerplate parts")

Without GitHub template

  1. Clone this project (git clone https://github.com/mirego/elixir-boilerplate.git)
  2. Delete the internal Git directory (rm -rf .git)
  3. Run the boilerplate setup script (./boilerplate-setup.sh YourProjectName)
  4. Create a new Git repository (git init)
  5. Create the initial Git commit (git commit -a -m "Initial commit")

Preferred libraries

Some batteries aren’t included since all projects have their own needs and requirements. Here’s a list of our preferred libraries to help you get started:

Category Libraries
Authentication ueberauth, pow
Asynchronous job processing oban
Emails bamboo, swoosh
File upload waffle
HTTP client tesla
HTML parsing floki
Pagination scrivener
Mocks mox, mimic
Search elasticsearch

License

Elixir Boilerplate is © 2017-2020 Mirego and may be freely distributed under the New BSD license. See the LICENSE.md file.

The drop logo is based on this lovely icon by Creative Stall, from The Noun Project. Used under a Creative Commons BY 3.0 license.

About Mirego

Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We’re a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.

We also love open-source software and we try to give back to the community as much as we can.

elixir-boilerplate's People

Contributors

adrianomitre avatar alarochelle avatar bducharme avatar boubalou avatar charlesdemers avatar dependabot[bot] avatar didia avatar garno avatar gcauchon avatar gingman avatar jfcartkeep avatar joeybg avatar leaexplores avatar lewazo avatar madumo avatar mandarvaze avatar mathieulegault1 avatar matkev avatar pascalhamel avatar pboutin avatar remi avatar romarickb avatar ryvasquez avatar simonprev avatar thermech avatar voughtdq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

elixir-boilerplate's Issues

GitHub Actions Run make prepare step fails retrieving phoenix-framework

GitHub Actions Run make prepare step fails while retrieving phoenix framework:

npm ci --prefix assets
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://[email protected]/phoenixframework/phoenix.git
npm ERR! 
npm ERR! Warning: Permanently added the RSA host key for IP address '140.82.114.4' to the list of known hosts.
npm ERR! [email protected]: Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR! 
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/runner/.npm/_logs/2021-05-11T19_43_55_927Z-debug.log
make: *** [Makefile:62: prepare] Error 1
Error: Process completed with exit code 2.

Any recommendation for that, per how you use this boilerplate?

Add ex_machina factory setup

  • We’re using ExMachina in the majority of our Elixir projects that use Ecto
  • Ecto is included in this boilerplate project

Therefore, a basic (working) ExMachina setup should be included in this boilerplate project 😄

[Linux] init script fails step "Replacing boilerplate identifiers in file and directory paths"

It fails when renaming the files

(...)
\033[0;33m▶ Replacing boilerplate identifiers in file and directory paths\033[0m
mv ./lib/elixir_boilerplate.ex ./lib/my_new_project.ex
mv ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex ./lib/my_new_project_graphql/my_new_project_graphql.ex
mv: cannot move './lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex' to './lib/my_new_project_graphql/my_new_project_graphql.ex': No such file or directory
mv ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex ./lib/my_new_project_health/my_new_project_health.ex
mv: cannot move './lib/elixir_boilerplate_health/elixir_boilerplate_health.ex' to './lib/my_new_project_health/my_new_project_health.ex': No such file or directory
\033[0;32m▶ Done!\n\033[0m
(...)
Full log
$ ./boilerplate-setup.sh MyNewProject

find: paths must precede expression: `2'
\033[0;33m▶ Configuration\033[0m
ElixirBoilerplate → MyNewProject
elixir_boilerplate → my_new_project
elixir-boilerplate → my-new-project

\033[0;33m▶ Replacing boilerplate identifiers in content\033[0m
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.credo.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.credo.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.credo.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.env.dev
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.env.dev
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.env.dev
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.env.test
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.env.test
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.env.test
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.formatter.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.formatter.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.formatter.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/dependabot.yml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/dependabot.yml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/dependabot.yml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/pull_request_template.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/pull_request_template.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/pull_request_template.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/workflows/accent.yaml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./.github/workflows/ci.yaml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./BOILERPLATE_README.fr.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./BOILERPLATE_README.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CHANGELOG.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CHANGELOG.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CHANGELOG.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CODE_OF_CONDUCT.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./CONTRIBUTING.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./CONTRIBUTING.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./CONTRIBUTING.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./Dockerfile
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./Dockerfile
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./Dockerfile
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./LICENSE.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./LICENSE.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./LICENSE.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./Makefile
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./Makefile
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./Makefile
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./README.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./README.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./README.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./accent.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./accent.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./accent.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/.eslintrc.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/.eslintrc.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/.eslintrc.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/js/app.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/js/app.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/js/app.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/package-lock.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/package-lock.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/package-lock.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/package.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/package.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/package.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/prettier.config.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/prettier.config.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/prettier.config.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./assets/stylelint.config.js
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./assets/stylelint.config.js
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./assets/stylelint.config.js
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/config.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/config.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/config.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/dev.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/dev.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/dev.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/prod.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/prod.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/prod.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/runtime.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/runtime.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/runtime.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./config/test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./config/test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./config/test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./coveralls.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./coveralls.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./coveralls.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./docker-compose.yml
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./docker-compose.yml
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./docker-compose.yml
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./docs/module-naming.fr.md
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/application.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/config.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/gettext.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/release.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate/repo.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/application/types.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/middleware/error_reporting.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/middleware/operation_name_logger.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/plugs/context.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_graphql/schema.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_health/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/endpoint.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/errors/errors.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/errors/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/home/controller.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/home/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/layouts/view.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/plugs/security.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/router.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./lib/elixir_boilerplate_web/socket.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./mix.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./mix.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./mix.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./package-lock.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./package-lock.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./package-lock.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./package.json
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./package.json
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./package.json
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./priv/repo/dummy.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./priv/repo/seeds.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./rel/overlays/bin/migrate
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./rel/overlays/bin/server
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./rel/overlays/bin/server
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./rel/overlays/bin/server
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate/factory_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate/gettext_interpolation_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/errors/view_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/errors_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/health_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/home/controller_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/elixir_boilerplate_web/ping_test.exs
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/channel_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/channel_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/channel_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/conn_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/conn_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/conn_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/data_case.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/data_case.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/data_case.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/factory.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/factory.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/factory.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/support/gettext_interpolation.ex
/usr/bin/sed -i s/elixir_boilerplate/my_new_project/g ./test/test_helper.exs
/usr/bin/sed -i s/elixir-boilerplate/my-new-project/g ./test/test_helper.exs
/usr/bin/sed -i s/ElixirBoilerplate/MyNewProject/g ./test/test_helper.exs
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Replacing boilerplate identifiers in file and directory paths\033[0m
mv ./lib/elixir_boilerplate.ex ./lib/my_new_project.ex
mv ./lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex ./lib/my_new_project_graphql/my_new_project_graphql.ex
mv: cannot move './lib/elixir_boilerplate_graphql/elixir_boilerplate_graphql.ex' to './lib/my_new_project_graphql/my_new_project_graphql.ex': No such file or directory
mv ./lib/elixir_boilerplate_health/elixir_boilerplate_health.ex ./lib/my_new_project_health/my_new_project_health.ex
mv: cannot move './lib/elixir_boilerplate_health/elixir_boilerplate_health.ex' to './lib/my_new_project_health/my_new_project_health.ex': No such file or directory
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Importing project README.md and README.fr.md\033[0m
rm -fr README.md && mv BOILERPLATE_README.md README.md && mv BOILERPLATE_README.fr.md README.fr.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate license → https://choosealicense.com\033[0m
rm -fr LICENSE.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate changelog\033[0m
rm -fr CHANGELOG.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate code of conduct and contribution information → https://help.github.com/articles/setting-guidelines-for-repository-contributors/\033[0m
rm -fr CODE_OF_CONDUCT.md CONTRIBUTING.md
\033[0;32m▶ Done!\n\033[0m
\033[0;33m▶ Removing boilerplate setup script\033[0m
rm -fr boilerplate-setup.sh
\033[0;32m▶ Done!\n\033[0m

Add corsica

Since we use Corsica in the majority of our project, we could use it in this boilerplate like we do plug_canonical_host or basic_auth — only enable it if a CORS_ALLOWED_ORIGINS environment variable is present.

query : http entry missing from config/dev.exs

(I'm new to elixir/phoenix development - so please pardon my ignorance)

As the title says http entry is missing from dev.exs, without it I get (RuntimeError) server can't start because :port in http config is nil, please use a valid port number when I run iex -S phx.server

When I added the following line to dev.exs the error went away

http: [port: System.get_env("PORT") || 4000

(Found the above here)

On a related note : Is there a reason config/dev.exs and config/test.exs so different ?
test.exs has secret and signing salt hard coded, while dev (is supposed to , I think) get it from .env.dev.local

boilerplate-setup.sh Linux limitation

Sed on MacOS and Linux behave a tiny bit different. -i '' works on MacOS, but will fail on Linux.

An example resolution that I'll paste-in-place here:

For support on both OSX and Linux, I use a simple if check to see if the bash script is running on OSX or Linux, and adjust the command's -i argument based on that.

if [[ "$OSTYPE" == "darwin"* ]]; then
  sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}"
else
  sed -i -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}"
fi

Source: https://stackoverflow.com/a/57766728

Based on the difference a viable solution might be to proxy the call to sed:

if [[ "$OSTYPE" == "darwin"* ]]; then
	sed_command = sed -i ''
else
	sed_command = sed -i
fi

Use TypeScript instead of plain JavaScript

Since we use TypeScript in the majority of our SPA projects (React, EmberJs), we could use it in this boilerplate to ensure that all JavaScript we write is typechecked. Everything in the assets folder is managed by the webpack config, it should be easy to add TypeScript in the existing setup.

To keep the local version up to date

Currently README in the USAGE section suggests to delete the internal Git directory (rm -rf .git) right after cloning. Isn't it better to keep Git directory in order to be able to pull out updates from time to time?

Using multiple CAPS letters when running the boilerplate setup script gives an unexpected result

When providing a name with multiple CAPS letters such as:

./boilerplate-setup.sh BoubalouSauceBBQ

The result of the configuration change is not what I had in mind!

Actual results

▶ Configuration
ElixirBoilerplate → BoubalouSauceBBQ
elixir_boilerplate → boubalou_sauce_bb_q
elixir-boilerplate → boubalou-sauce-bb-q

Expected results

▶ Configuration
ElixirBoilerplate → BoubalouSauceBBQ
elixir_boilerplate → boubalou_sauce_bbq
elixir-boilerplate → boubalou-sauce-bbq

Cannot run it on Google Cloud Run

Hello 👋

Thank you for putting this repo on github, there are really nice things to learn from it.

I know this isn't really an issue with this repository that I'm writing now, it's more about asking for some help. I apologize in advance if you think this is inappropriate.

I'm trying to run some Phoenix application on Google Cloud Run and I'm having some difficulties for now. It worked a few weeks ago, and without even changing my image, it stopped working at some point.

While trying to search online on how to solve my problem, I found your video (https://www.youtube.com/watch?v=6Jo8WlWq-Fw) and this repo.

So I followed the video and tried to run this repo on Google Cloud Run. And the good news (well, I see that as a good news) is that this repo does not run either.

The bad part is that I don't have much to debug. This is the message that is displayed:

image

And as you can see, there is absolutely no logs written.

Maybe I did something wrong, because the boilerplate is different from what is shown in the video, so I may have missed an important step while commenting migrations and stuff like that in the code. I'm able to run it locally though, using docker run --rm -it -e PORT=8080 -e SIGNING_SALT=abcde -e SECRET_KEY_BASE=V7SuPpXRJWyBtEP028aEFUzaVS1jnR0sMI6HwRVwzQRo9Z8fcV1HHB0OspZxetCA -p 8080:8080 boilerplate_cloud_run. The health endpoint returns {"status":"ok","version":"0.0.1"}

But as I said, I cannot run my own project (which is a Phoenix application, without ecto) either. Can anyone who is used to run this on Google Cloud Run tell me if they can still successfully run it if they try to run it right now please?
That would be really helpful to me, in order to know if something is wrong in my project and what I did with this repo, or if there is some kind of compatibility issue with Elixir / BEAM.

Best regards.

current Dockerfile fails with default phoenix package.json dependencies

This is the default, to keep the same version as the mix package:

package.json

  "dependencies": {
    "phoenix": "file:../deps/phoenix",
    "phoenix_html": "file:../deps/phoenix_html",
    "phoenix_live_view": "file:../deps/phoenix_live_view",

result:

Step 5/42 : COPY assets assets
--
151 | ---> 9060e2a6e703
152 | Step 6/42 : RUN npm ci --prefix assets --no-audit --no-color --unsafe-perm
153 | ---> Running in e40b93be0361
154 | npm ERR! code ENOENT
155 | npm ERR! syscall open
156 | npm ERR! path /build/assets/node_modules/phoenix/package.json
157 | npm ERR! errno -2
158 | npm ERR! enoent ENOENT: no such file or directory, open '/build/assets/node_modules/phoenix/package.json'
159 | npm ERR! enoent This is related to npm not being able to find a file.
160 | npm ERR! enoent

Strict version requirements

make dependencies fails saying You are using Node.js 10.15.3 but the required version specified in package.json is 10.14.2

If this is not a strict requirements, package.json could be changed to >=10.14.2 (I can make this simple change and send a PR, but want to understand if it would be OK)

Make the project available as Aqua template

It seems that initializing the project can be done a bit more handy with Aqua template engine. It's generaly created for this purposes.

With small changes the project can be boilerplated using

mix aqua new boilerplate MyApp

with optional docker (for example):

mix aqua new boilerplate MyApp --no-docker

With auto predefined Elixir versions, and better discovered project_name changes.

If it's possible - I can do this for the project, just want to be sure that it has any sence.

Question about `SoBelow` config in this repo

Hi! Thanks for making this open source! This is an amazing resource for the community!

I have a question about SoBelow errors/best practices:

I see that you ignore
Config.HTTPS (https://github.com/mirego/elixir-boilerplate/blob/master/.sobelow-conf#L8)
This is interesting because I've seen this be triggered even when there is no
http connection whatsoever, so it makes sense that you ignored it.

My question has to do with the Config.CSP check that you don't ignore and actually solve.
In a fresh phx.new app, sobelow cries because it doesn't find the map in
plug :put_secure_browser_headers in router.ex

I actually wanted to learn more about this issue. So I created this:
nccgroup/sobelow#61 which eventually led to a patch
on their docs here: nccgroup/sobelow#62

Then, I stumbled upon how you solve the problem:
https://github.com/mirego/elixir-boilerplate/blob/master/lib/elixir_boilerplate_web/content_security_policy.ex#L1

I was wondering if there is anything we can do. Maybe we:

  • make this solution more visible (maybe another patch to sobelow?)
  • push this to phoenix? and have this be a default of sorts? I'm very
    cautions with security related code and love when there are standards that we
    just follow and trust. Since sobelow itself is somewhat new, maybe this is
    just a natural progression we are experiencing.
  • add this to Phoenix's docs somewhere?

Anyways, thanks for the OSS work, I really appreciate your time. ❤️ 💜

[Question] GraphQL

I saw your latest project is using Absinthe for a GraphQL API, will this be implemented into this boilerplate soon?

Assets endpoint behaves unexpectedly when not using STATIC_URL_* variables

Since we’re always passing a static_url configuration to the endpoint:

static_url: [
  scheme: Environment.get("STATIC_URL_SCHEME"),
  host: Environment.get("STATIC_URL_HOST"),
  port: Environment.get("STATIC_URL_PORT")
],

Phoenix always assume we’re using a valid configuration to generate static asset URLs. But sometimes we may not want to provide these variables.

This doesn’t cause any problems when running the application locally (because it falls back to "localhost" + PORT).

But it does cause problems in production, where PORT is often present (in Heroku, it represents the internal port that the container exposes). So the fallback on "localhost" + PORT doesn’t work anymore.

So we might end up with generated asset URLs such http://localhost:1750/css/app-abc123.css when we actually want https://example.com/css/app-abc123.css.

Let’s make sure we implement our own smart fallback 😄

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.