Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions configure_git_repository.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ Please stick to it unless you have special needs.
* Features: Remove *Wikis*, *Issues* and *Projects*
* Pull Requests
* Disable *Allow merge commits* and *Allow rebase merging*
* Always suggest updating pull request branches
* Allow auto-merge
* Automatically delete head branches
* Always suggest updating pull request branches
* Manage access
* Add *staff* team as a collaborator with Admin access
* Add *security* team as collaborator with Write access
Expand All @@ -18,13 +18,13 @@ Please stick to it unless you have special needs.
* Rules/Rulesets
* `develop`
* Enforcement status: `Active`
* Branch targeting criteria: `develop`
* Bypass list: add `Repository Admin` Role with *allow for pull requests only* option
* Branch targeting criteria: `develop`
* Restrict deletions
* Require linear history
* Require a pull request before merging
* Require status checks to pass
* Select `ci/semaphore/push`
* Select `ci/semaphore/push` (WRONG. NOT AVAILABLE NOW)
* Block force pushes
* `main` (same as develop but...)
* Branch targeting criteria: `main`
Expand Down
1 change: 1 addition & 0 deletions ruby_on_rails/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ The application (and relative GitHub repo) will be named after the `[project-nam
> Have you decided if you need two environments (develop and main) or just one?
> As a rule of thumb: for customers we always use two environments, for internal projects we usually only use one.
> Why the difference? Because we can bare the risk of having a bug in an internal project, but we cannot do that for a customer.
> Decide with your team if you want one or two branches.

1. [Initialise the Rails Application](app_initialisation.md)
1. [Push to Git Repository](first_git_push.md)
Expand Down
54 changes: 5 additions & 49 deletions ruby_on_rails/app_initialisation.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,17 @@ rails new [project-name] --database=postgresql --skip-kamal --skip-ci --skip-act
where the `project-name` is exactly the one you chose before.

> ⚠️ You may want to choose a different database than Postgres, but most of the time this will be your choice.\
> If you do not need a DB you may rethink the fact that you may not need Rails at all: Take a look at [Sinatra](http://www.sinatrarb.com/) or [Angular](https://angular.io/)\
> You might also need actionmailbox of course, so always double-check the parameters that you are using.

> ⭐️ This setup does not include either js-bundling nor css-bundling by default.\
> It will start with the simplest possible Rails setup and will use sprockets and importmaps.\
> If you need to do fancy stuff, discuss with your team the opportunity of including a js-bundling and css-bundling tool.\
> We want to go ["no build"](https://www.youtube.com/watch?v=iqXjGiQ_D-A) whenever possible.

* Run `bin/setup`

* Run `bundle exec rails db:migrate` to generate an empty `schema.rb` file.
* Run `bin/setup`

* Then check your default Rails setup by running `rails s` and visiting http://localhost:3000.
* Then check your default Rails setup by running `bin/run` and visiting http://[project-name].localhost:3000.
You should be on Rails now, yay!
* Finally check if http://localhost:3000/up is green.

Expand Down Expand Up @@ -61,36 +59,6 @@ Some other adjustments must be performed manually.

> ⭐️bin/check, bin/fastcheck and bin/run are standardized tools for more convenience at Renuo.

### Manual adjustments

Please perform these adjustments manually:

#### ENV variables

* Add `dotenv-rails` to Gemfile. Check the [gem homepage](https://github.com/bkeepers/dotenv) to see how to install the gem.
* and create `.env.example` in the root folder of the project where you will specify the only environment variable you need for now:
`SECRET_KEY_BASE`.
* Going forward we will only push the `.env.example` file to the repository in order to protect our env variables.
* Add .env to .gitignore
* Add the following section to your `bin/setup` script so that the `.env` is created from the `.env` when the project is setup locally:

```ruby
puts "\n== Copying sample files =="
unless File.exist?('.env')
system! 'cp .env.example .env'
end
```

* add one more key to .env.example `APP_PORT=3000`
* To ensure you have all the required keys from the `.env.example` in your `.env`,
create the initializer for dotenv-rails in `config/initializers/dotenv_rails.rb`:

```ruby
Dotenv.require_keys(Dotenv.parse(".env.example").keys)
```

* Run `bin/setup` again.

### Secrets

We store the secrets necessary to configure the project locally in a 1password Item.
Expand All @@ -107,32 +75,20 @@ Check existing projects for an example of the usage.
* Update `config/application.rb` and set the default language and timezone

```ruby
config.time_zone = 'Zurich' # may vary
config.i18n.default_locale = :de # may vary
```

* Update your `config/environments/production.rb` settings:

```ruby
config.force_ssl = true # uncomment
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "warn") # change
config.time_zone = 'Zurich'
config.i18n.default_locale = :de
```

* Update `config/environments/development.rb` settings:

```ruby
config.action_controller.action_on_unpermitted_parameters = :raise
config.i18n.raise_on_missing_translations = true # uncomment

config.generators do |g|
g.apply_rubocop_autocorrect_after_generate!
end
config.generators.apply_rubocop_autocorrect_after_generate! # uncomment
```

* Update `config/environments/test.rb` settings:

```ruby
config.action_controller.action_on_unpermitted_parameters = :raise
config.i18n.raise_on_missing_translations = true # uncomment
config.i18n.exception_handler = Proc.new { |exception| raise exception.to_exception } # add
config.active_record.verbose_query_logs = true # add
Expand Down
41 changes: 40 additions & 1 deletion ruby_on_rails/template.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
insert_into_file "bin/setup", before: "\n puts \"\\n== Preparing database ==\"" do
<<-RUBY
puts "\\n== Fetching 1password dependencies =="
system! 'renuo fetch-secrets'
system! 'renuo fetch-secrets'
RUBY
end

Expand All @@ -37,6 +37,45 @@
RUBOCOP
end

answer = ask("Do you want to setup dotenv? (y/n)", default: "y")

if answer.downcase == "y"
insert_into_file "Gemfile", after: /^group :development, :test do\n/ do
<<~RUBY
gem "dotenv"
RUBY
end

create_file ".env.example", force: true do
<<~ENV
SECRET_KEY_BASE=<%= `bin/rails secret`.strip %>
APP_PORT=3000
ENV
end

create_file ".env", force: true do
<<~ENV
SECRET_KEY_BASE=#{SecureRandom.hex(64)}
APP_PORT=3000
ENV
end

create_file "config/initializers/dotenv.rb", force: true do
<<~DOTENV
Dotenv.require_keys(Dotenv.parse(".env.example").keys)
DOTENV
end

insert_into_file "bin/setup", before: "\n puts \"\\n== Preparing database ==\"" do
<<-RUBY
puts "\n== Copying sample files =="
unless File.exist?('.env')
system! 'cp .env.example .env'
end
RUBY
end
end

create_file "bin/run", force: true do
<<~RUN
#!/usr/bin/env bash
Expand Down