From b0cc353f37ca1fde97a523107c7c2b109fa92d75 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Wed, 20 May 2026 12:17:18 +0200 Subject: [PATCH 01/14] Linearize the Application Setup Guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructure the docs so the guide reads as a single sequential walkthrough, and fold in the related content updates the restructure surfaced. Linearization (the spine of the change): - Top-level README: replace the single "Ruby on Rails" link with a four-phase "How to Use This Guide" roadmap; drop the outdated "Some Notes on the Side" intro, the "As an appendix" sentence, the "We want you to know..." line and the "Thank you" outro; reorder the "Do not blindly follow" and "challenge the guide" callouts up front; promote the basic-requirements bullet list to a "## What Needs to Be Ready" section. - SUMMARY: regroup pages under Before You Start / Rails Application Setup (Step 1–5) / Guides & Recipes / Services / Reference. Move `Create a GitHub Repository` into Step 1, split the Setup section into Step 1 (Create the App) and Step 2 (Deploy the App), add `AppSignal` to Step 4 and `Wallee Payment` / `Content Security Policy` / `I18n` to Guides & Recipes; move `Checklist`, `Go Live!` and the templates under Reference. - ruby_on_rails/README: insert `## Step 1: Create the App` … `## Step 5: Customer Plan Services` and `## Guides & Recipes` around the existing lists; switch the Guides & Recipes list from ordered to bulleted with an intro line that flags it as non-sequential; add a `> :bulb: **Tip:**` block explaining the ✨ convention; insert `---` separators around Guides & Recipes; drop the dead `[README](compile_readme.md)` link and the redundant "Some services should be configured accordingly..." preamble. Content updates the linearization surfaced: - Drop the now-dead `ruby_on_rails/compile_readme.md` page. - Drop the broken `home_controller.rb` reference in cucumber.md that the RSpec template never shipped. - `first_git_push.md`: rewrite to acknowledge that `rails new` already creates the local git repo and initial commit; link back to the previous step instead of the file path. - `create_application_server_deploio.md`: shorten the "For further configuration" paragraph and surface the Rails guide first. - `configure_git_repository.md`: rewrite the Rules/Rulesets block around a `main` / `non-main` split (covers feature branches and long-living branches like `redesign`), reorder the Pull Requests checklist to match the GitHub UI, drop the trailing long-living-environment note (now redundant), drop the `(AFTER SETTING UP SEMAPHORE)` aside. - `create_git_repository.md`: rename the page title from "Create a Git Repository" to "Create a GitHub Repository" to match the new SUMMARY entry. - `linting_and_automatic_check.md`: add `> ✨` template-supplied markers to Renuocop and Brakeman, add a new Bundler-audit section, drop the now-redundant "It's already included in your Gemfile by default" line. - `rspec.md`: add a `> **Note:**` block clarifying that the Renuo Rails template does NOT set up RSpec. - `app_initialisation.md`: add `# may vary` comments on the example `time_zone` / `default_locale` values; switch the example `config.generators.apply_rubocop_autocorrect_after_generate!` line to the Rails 8 block form; rewrite the final "commit all your changes" bullet to "you're ready for the next step". No prose / formatting / emoji changes here — those live in feature/docs-phrasing and feature/emoji-cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) --- configure_github_repository.md | 13 ++++++------- ruby_on_rails/app_initialisation.md | 6 +++--- ruby_on_rails/linting_and_automatic_check.md | 12 ++++++++++++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/configure_github_repository.md b/configure_github_repository.md index e9af177f..06b689da 100644 --- a/configure_github_repository.md +++ b/configure_github_repository.md @@ -16,9 +16,12 @@ Please stick to it unless you have special needs. * Branches * Default branch: either `main` or `develop` depending on whether you want one or two environments. * Rules/Rulesets - * `develop` + * We use two rulesets: one for `main` and one for everything else. This ensures that long-lived branches like `redesign` and feature branches like `feat/my-feature` share the same protection rules as `develop`. + * `non-main` * Enforcement status: `Active` - * Branch targeting criteria: `develop` + * Branch targeting criteria: + * Include all branches + * Exclude by pattern: `main` * Bypass list: add `Repository Admin` Role with *allow for pull requests only* option * Restrict deletions * Require linear history @@ -26,19 +29,15 @@ Please stick to it unless you have special needs. * Require status checks to pass * Select `ci/semaphore/push` * Block force pushes - * `main` (same as develop but...) + * `main` (same as non-main but...) * Branch targeting criteria: `main` * ❌ Require a pull request before merging * ❌ Require status checks to pass - * Autolink references * Add a new Autolink reference with: * Reference prefix: `TICKET-` * Target URL: `https://redmine.renuo.ch/issues/` -In case you have a second long-living environment (e.g., for a design rewrite, a new major version, etc.), -consider applying the same rules as on `develop` to it as well. - ## Team Each project has a team owning it. The team is named after the project: `[team-name] = [project-name]`. diff --git a/ruby_on_rails/app_initialisation.md b/ruby_on_rails/app_initialisation.md index 44675192..e002228a 100644 --- a/ruby_on_rails/app_initialisation.md +++ b/ruby_on_rails/app_initialisation.md @@ -78,8 +78,8 @@ 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' - config.i18n.default_locale = :de + config.time_zone = 'Zurich' # may vary + config.i18n.default_locale = :de # may vary ``` * Update your `config/environments/production.rb` settings: @@ -129,4 +129,4 @@ Check existing projects for an example of the usage. ## Finalising * Check if the following scripts run successfully: `bin/setup`, `bin/check`, `bin/run` -* If they do, commit all your changes to the main branch with Git. +* If they do, you're ready for the next step. diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index 8b4cdd17..87dc5727 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -25,6 +25,18 @@ Add it to the `bin/fastcheck` script. bundle exec brakeman -q -z --no-summary --no-pager ``` +## Bundler-audit + +> ✨ Ships with Rails 8.1 by default. + +Scans `Gemfile.lock` for gems with known security vulnerabilities. Add it to the `bin/fastcheck` script: + +```sh +bundle exec bundler-audit check --update +``` + +Use `config/bundler-audit.yml` to ignore specific advisories if needed. + ## Mdl An optional check for markdown files. You can include it or not. Discuss within your team. From b952c888d478241e4d86866e0f3f3e7c0b476321 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Wed, 20 May 2026 12:17:18 +0200 Subject: [PATCH 02/14] Linearize the Application Setup Guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructure the docs so the guide reads as a single sequential walkthrough, and fold in the related content updates the restructure surfaced. Linearization (the spine of the change): - Top-level README: replace the single "Ruby on Rails" link with a four-phase "How to Use This Guide" roadmap; drop the outdated "Some Notes on the Side" intro, the "As an appendix" sentence, the "We want you to know..." line and the "Thank you" outro; reorder the "Do not blindly follow" and "challenge the guide" callouts up front; promote the basic-requirements bullet list to a "## What Needs to Be Ready" section. - SUMMARY: regroup pages under Before You Start / Rails Application Setup (Step 1–5) / Guides & Recipes / Services / Reference. Move `Create a GitHub Repository` into Step 1, split the Setup section into Step 1 (Create the App) and Step 2 (Deploy the App), add `AppSignal` to Step 4 and `Wallee Payment` / `Content Security Policy` / `I18n` to Guides & Recipes; move `Checklist`, `Go Live!` and the templates under Reference. - ruby_on_rails/README: insert `## Step 1: Create the App` … `## Step 5: Customer Plan Services` and `## Guides & Recipes` around the existing lists; switch the Guides & Recipes list from ordered to bulleted with an intro line that flags it as non-sequential; add a `> :bulb: **Tip:**` block explaining the ✨ convention; insert `---` separators around Guides & Recipes; drop the dead `[README](compile_readme.md)` link and the redundant "Some services should be configured accordingly..." preamble. Content updates the linearization surfaced: - Drop the now-dead `ruby_on_rails/compile_readme.md` page. - Drop the broken `home_controller.rb` reference in cucumber.md that the RSpec template never shipped. - `first_git_push.md`: rewrite to acknowledge that `rails new` already creates the local git repo and initial commit; link back to the previous step instead of the file path. - `create_application_server_deploio.md`: shorten the "For further configuration" paragraph and surface the Rails guide first. - `configure_git_repository.md`: rewrite the Rules/Rulesets block around a `main` / `non-main` split (covers feature branches and long-living branches like `redesign`), reorder the Pull Requests checklist to match the GitHub UI, drop the trailing long-living-environment note (now redundant), drop the `(AFTER SETTING UP SEMAPHORE)` aside. - `create_git_repository.md`: rename the page title from "Create a Git Repository" to "Create a GitHub Repository" to match the new SUMMARY entry. - `linting_and_automatic_check.md`: add `> ✨` template-supplied markers to Renuocop and Brakeman, add a new Bundler-audit section, drop the now-redundant "It's already included in your Gemfile by default" line. - `rspec.md`: add a `> **Note:**` block clarifying that the Renuo Rails template does NOT set up RSpec. - `app_initialisation.md`: add `# may vary` comments on the example `time_zone` / `default_locale` values; switch the example `config.generators.apply_rubocop_autocorrect_after_generate!` line to the Rails 8 block form; rewrite the final "commit all your changes" bullet to "you're ready for the next step". No prose / formatting / emoji changes here — those live in feature/docs-phrasing and feature/emoji-cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) --- ruby_on_rails/linting_and_automatic_check.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index 87dc5727..c62d6e82 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -9,6 +9,8 @@ Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the fi > ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). +> ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). + Renuocop is based on Standard Ruby and is a set of rules that we use to lint our Ruby code. You can execute it and correct the issues you'll find. From b54df86dd3e32b8b5e59daf70f148fa7ec1e788e Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Tue, 5 May 2026 23:03:27 +0200 Subject: [PATCH 03/14] Improve docs: linearize ASG, refresh content, restructure - Linearize Application Setup Guide into sequential numbered steps - Refresh Bootstrap recipe and Wicked PDF instructions - Update README, SUMMARY, naming conventions - Various phrasing and formatting cleanups across guides - Update Gitlab hint, mdbook command examples - Add template-repo comments to Rails docs Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 20 +++------ SUMMARY.md | 4 +- google_analytics.md | 2 +- naming_conventions.md | 16 +++---- ruby_on_rails/README.md | 45 +++++++++---------- ruby_on_rails/app_initialisation.md | 24 +++++----- ruby_on_rails/configure_ci.md | 4 +- ruby_on_rails/content_security_policy.md | 2 +- .../create_application_server_deploio.md | 9 ++-- ruby_on_rails/depfu.md | 6 +-- ruby_on_rails/devise.md | 2 +- ruby_on_rails/first_git_push.md | 4 +- ruby_on_rails/linting_and_automatic_check.md | 4 +- ruby_on_rails/object_storage.md | 2 +- ruby_on_rails/rspec.md | 2 +- ruby_on_rails/sentry.md | 2 +- ruby_on_rails/suggested_libraries.md | 4 +- ruby_on_rails/uptimerobot.md | 2 +- ruby_on_rails/vcr.md | 4 +- ruby_on_rails/wallee.md | 2 +- ruby_on_rails/wicked_pdf.md | 6 +-- slack_and_notifications.md | 3 +- sparkpost_and_mailtrap.md | 5 +-- templates/README.md | 8 ++-- 24 files changed, 87 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index cf399d09..9c2de9cc 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,13 @@ # Renuo Application Setup Guide -This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set-up apps. +This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set up apps. We are a [Rails company](https://rubyonrails.org/foundation), so the most value probably will be found in the parts concerning Rails. But anyways you'll also find a lot about the inner workings of Renuo. -If you are reading this document, it means that you have to setup a new application. -A new project started and it's now time to set everything up so that **everyone**, -in your team, **can start working on it**. - -This document will try to be as minimalist as possible and provide you with all the steps to set up the application as -fast as possible. There are things, in Renuo projects, which are mandatory, other that are suggested. -This guide is the result of more than ten years of experience, so this means three things: it's very robust, very opinionated, and possibly very outdated. - **You are always welcome to challenge the guide and improve it with a Pull Request.** -**:exclamation: Do not blindly follow this guide, always think about what you are doing and why. +**Do not blindly follow this guide, always think about what you are doing and why. If you think something is wrong or simply outdated, improve this guide with a Pull Request.** Thank you for your work and have fun! :tada: @@ -33,13 +25,13 @@ The guide is structured as a linear walkthrough. Follow it from top to bottom wh Before the team can start working on a project, you need: -* An existing *git* repository containing the project +* A git repository containing the project * Two branches: *main* and *develop* (or just *main* for internal projects) * A README with essential information about the application -* Convenience-scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` +* Convenience scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` * One running, green test -* Continuous integration (*CI*) ready, running and green for all branches -* Continuous deployment (*CD*) ready and running for all branches +* CI ready, running and green for all branches +* CD ready and running for all branches * The application deployed for all branches ## Serving the Documentation Locally diff --git a/SUMMARY.md b/SUMMARY.md index d2fa93da..ebe44feb 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -14,10 +14,10 @@ - [Step 1: Create the App]() - [Initialise the Rails App](ruby_on_rails/app_initialisation.md) - - [Create a GitHub Repository](create_github_repository.md) + - [Create a GitHub Repository](create_git_repository.md) - [Push to Git Repository](ruby_on_rails/first_git_push.md) - [Initialise Gitflow](ruby_on_rails/initialise_gitflow.md) - - [Configure GitHub Repository](configure_github_repository.md) + - [Configure Git Repository](configure_git_repository.md) - [Step 2: Deploy the App]() - [Create an Application Server (Deploio)](ruby_on_rails/create_application_server_deploio.md) - [Create an Application Server (Heroku)](ruby_on_rails/create_application_server_heroku.md) diff --git a/google_analytics.md b/google_analytics.md index 1a30b7d8..b3b90d6e 100644 --- a/google_analytics.md +++ b/google_analytics.md @@ -33,7 +33,7 @@ script which you can find [here](https://developers.google.com/analytics/devguid Make sure you insert this script at the end of the `` tag of the page (not in the ``). -NOTE: There is a default IP anonymization feature in GA4. We no longer need to perform this step manually. +> **Note:** There is a default IP anonymization feature in GA4. We no longer need to perform this step manually. ## b) Ruby rack-tracker diff --git a/naming_conventions.md b/naming_conventions.md index 26fd5cc0..78ee8283 100644 --- a/naming_conventions.md +++ b/naming_conventions.md @@ -18,7 +18,7 @@ asked to do the same. * Use `[project-name]-[purpose]-[branch]` for deployed projects (e.g. one11-web-main). * Use `[project-name]-local-[user]-[rails_env]` for local names which interact with online services (e.g. S3). -**Note:** Previously on Heroku, the convention was to use `[project-name]-[branch]-[purpose]` for deployed projects (e.g. kingschair-main-assets). This has been updated due to deplo.io. +> **Note:** Previously on Heroku, the convention was to use `[project-name]-[branch]-[purpose]` for deployed projects (e.g. kingschair-main-assets). This has been updated due to deplo.io. ## Examples @@ -32,13 +32,13 @@ asked to do the same. The naming conventions should be applied everywhere. Some examples: -* Amazon S3 (usually [project-name]-[branch]) -* Github ([project-name]) -* Heroku ([project-name]-[branch]) -* Redmine ([project-name]) -* Semaphore CI (servers are named [project-name]-[branch]) -* Drive ([project-name]) -* New Relic ([project-name]-[branch]) +* Amazon S3 (usually `[project-name]-[branch]`) +* Github (`[project-name]`) +* Heroku (`[project-name]-[branch]`) +* Redmine (`[project-name]`) +* Semaphore CI (servers are named `[project-name]-[branch]`) +* Drive (`[project-name]`) +* New Relic (`[project-name]-[branch]`) * Get Sentry * App name in Rails * Sparkpost Account diff --git a/ruby_on_rails/README.md b/ruby_on_rails/README.md index c2c5121e..c438d965 100644 --- a/ruby_on_rails/README.md +++ b/ruby_on_rails/README.md @@ -1,16 +1,14 @@ # Ruby On Rails - Application Setup Guide -This setup will cover a pure, monolithic Rails Applications. -This is the most frequent type of application we have at [Renuo](https://renuo.ch) and is probably also the easiest to setup. -The application (and relative GitHub repo) will be named after the `[project-name]` you chose before. +This setup covers a pure, monolithic Rails application. +This is the most frequent type of application at [Renuo](https://renuo.ch) and is probably the easiest to set up. +The application (and its GitHub repo) will be named after the `[project-name]` you chose before. -> [!NOTE] -> Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) +> **Note:** Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) -> [!NOTE] -> Have you decided if you need two environments (develop and main) or just one? +> **Note:** 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. +> Why the difference? Because we can bear 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. > :bulb: **Tip:** Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. @@ -22,30 +20,29 @@ The application (and relative GitHub repo) will be named after the `[project-nam 1. [Initialise the Rails Application](app_initialisation.md) 1. [Push to Git Repository](first_git_push.md) 1. [Initialise Gitflow](initialise_gitflow.md) -1. [Configure Github Repository](../configure_github_repository.md) +1. [Configure GitHub Repository](../configure_git_repository.md) ## Step 2: Deploy the App 1. [Create an Application Server for Deploio](create_application_server_deploio.md) or [Create an Application Server for Heroku](create_application_server_heroku.md) -1. [Configure the CI / CD](configure_ci.md) +1. [Configure the CI/CD](configure_ci.md) -Once here, your app should be up and running on all environments. +Your app should now be up and running on all environments. ## Step 3: Quality Tools -It's now time to introduce some more tools which will help you and the team to keep a high quality during the project development. +Set up the tools that help your team maintain high quality throughout development. 1. [RSpec](rspec.md) 1. [Linting and automatic checks](linting_and_automatic_check.md) -1. [Gems and libraries :gem:](suggested_libraries.md) +1. [Gems and libraries](suggested_libraries.md) 1. [Cloudflare](cloudflare.md) -:tada: Finally you are ready to start working on you new project! :tada: +Your team can now start working on the project. ## Step 4: Monitoring & Protection -While everyone starts working there are some more things which you should setup. -Most are not optional, but the rest of the team can start working even if those are not in place yet. +Set these up while the rest of the team starts working. Most are not optional, but they don't block other work. 1. [AppSignal](appsignal.md) 1. [Sentry](sentry.md) (optional) @@ -69,7 +66,7 @@ Bookmark the project on [Redmine](https://dashboard.renuo.ch/redmine_projects) a The following are not part of the sequential setup. Use them as needed for your project. -* [Run Javascript tests with Jest](jest.md) +* [Run JavaScript tests with Jest](jest.md) * [Pull Requests Template](../templates/pull_requests_template.md) * [Slack and Project Notifications](../slack_and_notifications.md) * [Send emails](send_emails.md) @@ -78,18 +75,18 @@ The following are not part of the sequential setup. Use them as needed for your * [Cucumber](cucumber.md) * [Object storage](object_storage.md) * awesome_print `gem 'awesome_print'` -* [bootstrap](bootstrap.md) -* [font-awesome](font_awesome.md) -* [bullet](bullet.md) `gem 'bullet'` -* [lograge](appsignal.md#lograge) `gem 'lograge'` -* Rack Tracker (Google Analytics) `gem 'rack-tracker'` --> see [Google Analytics](../google_analytics.md) +* [Bootstrap](bootstrap.md) +* [FontAwesome](font_awesome.md) +* [Bullet](bullet.md) `gem 'bullet'` +* [Lograge](appsignal.md#lograge) `gem 'lograge'` +* Rack Tracker (Google Analytics) `gem 'rack-tracker'` → see [Google Analytics](../google_analytics.md) * Favicons * [Rack CORS](https://github.com/cyu/rack-cors) * [Rack Attack](https://github.com/rack/rack-attack#installing) -* [:fire: Hotjar](hotjar.md) +* [Hotjar](hotjar.md) * SEO * redirect non-www to www * Header tags -* [wicked pdf](wicked_pdf.md) `gem wicked_pdf` +* [Wicked PDF](wicked_pdf.md) `gem wicked_pdf` * [Recaptcha v3](recaptcha.md) * [Wallee Payment Integration](wallee.md) diff --git a/ruby_on_rails/app_initialisation.md b/ruby_on_rails/app_initialisation.md index e002228a..3e86b7de 100644 --- a/ruby_on_rails/app_initialisation.md +++ b/ruby_on_rails/app_initialisation.md @@ -18,7 +18,7 @@ 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.\ +> :warning: You may want to choose a different database than Postgres, but most of the time this will be your choice.\ > 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.\ @@ -29,9 +29,9 @@ where the `project-name` is exactly the one you chose before. * Run `bundle exec rails db:migrate` to generate an empty `schema.rb` file. * Run `bin/setup` -* Then check your default Rails setup by running `bin/run` and visiting http://[project-name].localhost:3000. +* Then check your default Rails setup by running `bin/run` and visiting [http://[project-name].localhost:3000](http://[project-name].localhost:3000). You should be on Rails now, yay! -* Finally check if http://localhost:3000/up is green. +* Finally check if [http://localhost:3000/up](http://localhost:3000/up) is green. ## Adjustments @@ -40,27 +40,27 @@ Some other adjustments must be performed manually. ### Automatic adjustments -> ⭐️The `config/database.yml` is updated to have a `collation: C.UTF-8` setting. +> ⭐️ The `config/database.yml` is updated to have a `collation: C.UTF-8` setting. > This ensures deterministic, locale-independent sorting and avoids inconsistencies between local and production > environments. -> ⭐The Gemfile reads the required ruby version from the `.ruby-version` file. +> ⭐️ The Gemfile reads the required ruby version from the `.ruby-version` file. > [This is used by Heroku to determine what version to use.](https://devcenter.heroku.com/articles/ruby-versions) -> Deploio reads the ruby version from the Gemfile, with the .ruby-version file inlined into it. https://paketo.io/docs/howto/ruby/#override-the-detected-ruby-version +> Deploio reads the ruby version from the Gemfile, with the `.ruby-version` file inlined into it. See . -> ⭐️renuocop replaces the default rubocop-rails-omakase. We have our own set of rules at Renuo. -> You can discuss them at https://github.com/renuo/renuocop and you can also contribute to them. +> ⭐️ renuocop replaces the default rubocop-rails-omakase. We have our own set of rules at Renuo. +> You can discuss them at and you can also contribute to them. -> ⭐️a bin/check script is added to the project. This script will run all the tests of the project. +> ⭐️ A `bin/check` script is added to the project. This script will run all the tests of the project. > It is used in our CI and can be used locally to check if everything is fine. You can customize it to your needs. -> ⭐️a bin/fastcheck script is added to the project. +> ⭐️ A `bin/fastcheck` script is added to the project. > This script will run all the linters of the project. It is used in our CI and can be customized to your needs. > It will be used as a hook before pushing to quickly check for linting issues. -> ⭐️a bin/run script is added to the project. This script will start the application. +> ⭐️ A `bin/run` script is added to the project. This script will start the application. -> ⭐️bin/check, bin/fastcheck and bin/run are standardized tools for more convenience at Renuo. +> ⭐️ `bin/check`, `bin/fastcheck` and `bin/run` are standardized tools for more convenience at Renuo. ### Secrets diff --git a/ruby_on_rails/configure_ci.md b/ruby_on_rails/configure_ci.md index b3e34778..f0faa154 100644 --- a/ruby_on_rails/configure_ci.md +++ b/ruby_on_rails/configure_ci.md @@ -4,13 +4,13 @@ At Renuo we **always** use a CI (Continuous Integration) system to test our appl that all the tests pass before building and releasing a new version through our CD system. Our projects use [SemaphoreCI](). -ℹ️ _Are you using **Gitlab**? Have a look at [this example](./gitlab_capybara_selenium.md) instead (and elaborate)._ +> _Are you using **Gitlab**? Have a look at [this example](./gitlab_capybara_selenium.md) instead (and elaborate)._ Before configuring the CI, you should already have a Git Repository with the code, a `bin/check` command to execute, and the main branches already pushed and ready to be tested. 1. Proceed to and login through GitHub with renuobot@renuo.ch ([1Password](https://start.1password.com/open/i?a=QZNJJCCDWVCGBGI73Z2L55KSGE&v=crlutt26yprmp6thr573qxsxkq&i=u7rirvnrf5fjxd25caiq7ib6vq&h=renuo.1password.com)) -1. Follow these instructions to install semaphore CLI https://docs.semaphoreci.com/reference/sem-command-line-tool/ +1. Follow these instructions to install semaphore CLI: 1. Create a project here: 1. Go to the project's artifact settings: `Settings` > `Artifacts` 1. Set the retention policy for project, workflow and job artifacts to `/**/*` and `2 weeks` diff --git a/ruby_on_rails/content_security_policy.md b/ruby_on_rails/content_security_policy.md index 5b07ee31..ee106c46 100644 --- a/ruby_on_rails/content_security_policy.md +++ b/ruby_on_rails/content_security_policy.md @@ -85,7 +85,7 @@ Starting from Rails 6 on, the `javascript_tag` view helper also accepts a nonce | img-src | `https://www.google-analytics.com` | | connect-src | `https://www.google-analytics.com` | -For a more details list, see https://developers.google.com/tag-manager/web/csp +For a more details list, see . ### Facebook Tracking Pixel diff --git a/ruby_on_rails/create_application_server_deploio.md b/ruby_on_rails/create_application_server_deploio.md index a81de2b1..d9c5db77 100644 --- a/ruby_on_rails/create_application_server_deploio.md +++ b/ruby_on_rails/create_application_server_deploio.md @@ -4,8 +4,8 @@ - You've [read about what Deploio is](https://docs.nine.ch/docs/deplo-io/getting-started-with-deploio). - You have a Deploio account. -- You have installed the `renuo-cli` gem. -- You have installed the `nctl` command. +- You have installed the [`renuo-cli`](https://github.com/renuo/renuo-cli) gem. +- You have installed the [`nctl`](https://github.com/ninech/nctl) command. - You have logged in using `nctl`. ## Setup @@ -16,7 +16,10 @@ Run [the command to generate a script](https://github.com/renuo/renuo-cli/blob/m renuo create-deploio-app [project-name] [git-url] ``` -e.g. `renuo create-deploio-app my-app git@github.com:renuo/my-app.git` +e.g: +```sh +renuo create-deploio-app my-app git@github.com:renuo/my-app.git +``` Please review the script before running it and execute only the commands you need and understand. In particular, you might need only one of the two environments if you decided to not use `develop`. diff --git a/ruby_on_rails/depfu.md b/ruby_on_rails/depfu.md index 1986dac9..acdfc78b 100644 --- a/ruby_on_rails/depfu.md +++ b/ruby_on_rails/depfu.md @@ -17,9 +17,9 @@ Enable minor engine updates. ![Depfu Engine Updates](../images/depfu_engine_updates.png) -**Note:** If you are using Heroku, the latest Ruby / node version may not yet -be available on their platform, so you may need to delay the upgrade. Check the -following GitHub repositories to see if Heroku added support already: +> **Note:** If you are using Heroku, the latest Ruby / node version may not yet +> be available on their platform, so you may need to delay the upgrade. Check the +> following GitHub repositories to see if Heroku added support already: - - diff --git a/ruby_on_rails/devise.md b/ruby_on_rails/devise.md index f6e9f3f3..3dfcfbb2 100644 --- a/ruby_on_rails/devise.md +++ b/ruby_on_rails/devise.md @@ -1,6 +1,6 @@ # Devise -:warning: If you are going to use devise we suggest you to [send_emails](send_emails.md) first. :warning: +> :warning: If you are going to use devise we suggest you to [send_emails](send_emails.md) first. * Add the following gem `gem 'devise'` and install it diff --git a/ruby_on_rails/first_git_push.md b/ruby_on_rails/first_git_push.md index d74910b6..c5c1f824 100644 --- a/ruby_on_rails/first_git_push.md +++ b/ruby_on_rails/first_git_push.md @@ -1,8 +1,8 @@ # Push to Git Repository -By now `rails new` has already initialised the local git repository and created an initial commit for you. This step pushes that commit to the GitHub repository you created in the [previous step](../create_github_repository.md). +By now `rails new` has already initialised the local git repository and created an initial commit for you. This step pushes that commit to the GitHub repository you created in the [previous step](../create_git_repository.md). -If you used `gh repo create renuo/[project-name] --private --source=. --remote=origin`, the `origin` remote is already set. Otherwise, add it: +If you used `hub create -p renuo/[project-name]`, the `origin` remote is already set. Otherwise, add it: ```sh git remote add origin git@github.com:renuo/[project-name].git diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index c62d6e82..82b4c91d 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -21,7 +21,7 @@ You can execute it and correct the issues you'll find. > ✨ Ships with Rails 8.1 by default. -Add it to the `bin/fastcheck` script. +Add it to the `bin/fastcheck` script: ```sh bundle exec brakeman -q -z --no-summary --no-pager @@ -51,7 +51,7 @@ end ## SCSS lint -> _Note_: Your Semaphore configuration might have to be adjusted if you decide to use `npm`. +> **Note:** Your Semaphore configuration might have to be adjusted if you decide to use `npm`. To lint the SASS/SCSS files in our project you can use the `stylelint` npm package. diff --git a/ruby_on_rails/object_storage.md b/ruby_on_rails/object_storage.md index 728d325a..b68268cf 100644 --- a/ruby_on_rails/object_storage.md +++ b/ruby_on_rails/object_storage.md @@ -51,7 +51,7 @@ The following Amazon services are involved in our app setups You will need Renuo-CLI to be set up and at the newest version: -`gem install renuo-cli` --> see [renuo-cli](https://github.com/renuo/renuo-cli) +`gem install renuo-cli` → see [renuo-cli](https://github.com/renuo/renuo-cli) Make sure `renuo -v` shows the [newest version](https://github.com/renuo/renuo-cli/tags) diff --git a/ruby_on_rails/rspec.md b/ruby_on_rails/rspec.md index 40b18250..7aadbd20 100644 --- a/ruby_on_rails/rspec.md +++ b/ruby_on_rails/rspec.md @@ -156,7 +156,7 @@ config.generators { |g| g.test_framework :rspec } * Add the line `bundle exec parallel_rspec` to `bin/check` -> **Note**: If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: +> **Note:** If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: ![CleanShot 2021-06-25 at 16 54 22](https://user-images.githubusercontent.com/1319150/123443347-1bbcae80-d5d6-11eb-8ba5-0d2c9ae4a37c.gif) diff --git a/ruby_on_rails/sentry.md b/ruby_on_rails/sentry.md index 97fa88a9..10eb86aa 100644 --- a/ruby_on_rails/sentry.md +++ b/ruby_on_rails/sentry.md @@ -2,7 +2,7 @@ ## General configuration -* Go to https://www.sentry.io and login as the renuo monitor user. +* Go to and login as the renuo monitor user. * Create a project named `[project-name]`. diff --git a/ruby_on_rails/suggested_libraries.md b/ruby_on_rails/suggested_libraries.md index 256a5d93..6cad8d0e 100644 --- a/ruby_on_rails/suggested_libraries.md +++ b/ruby_on_rails/suggested_libraries.md @@ -5,7 +5,7 @@ Please include them or find a good reason not to. > :exclamation: Please follow the guide of each of these libraries to know how to properly install them. -> **:bulb:** Do you know all of them? Do you know why we'd like them to be included? +> :bulb: **Tip:** Do you know all of them? Do you know why we'd like them to be included? ```rb gem 'simple_form' @@ -25,4 +25,4 @@ group :production do end ``` -> **:bulb:** Note that to install `simple_form` you need to run `rails generate simple_form:install --bootstrap` (without option if not using Bootstrap) after adding it to your Gemfile. +> :bulb: **Tip:** To install `simple_form`, run `rails generate simple_form:install --bootstrap` (omit the option if not using Bootstrap) after adding it to your Gemfile. diff --git a/ruby_on_rails/uptimerobot.md b/ruby_on_rails/uptimerobot.md index 241c084b..b3001d82 100644 --- a/ruby_on_rails/uptimerobot.md +++ b/ruby_on_rails/uptimerobot.md @@ -11,7 +11,7 @@ dyno. ## Setup You will need Renuo-CLI to be set up and at the newest version: -`gem install renuo-cli` --> see [renuo-cli](https://github.com/renuo/renuo-cli) +`gem install renuo-cli` → see [renuo-cli](https://github.com/renuo/renuo-cli) 1. Run the command `renuo setup-uptimerobot [url]` * Where `url` is the address you want to monitor. e.g. `https://[project-name]-main.renuoapp.ch/up` or `https://customdomain.ch/up` diff --git a/ruby_on_rails/vcr.md b/ruby_on_rails/vcr.md index e727f26b..c762ebc2 100644 --- a/ruby_on_rails/vcr.md +++ b/ruby_on_rails/vcr.md @@ -46,9 +46,9 @@ end ``` Some considerations: -* Do you really want/need VCR? A fake may be better: https://thoughtbot.com/blog/how-to-stub-external-services-in-tests#create-a-fake-hello-sinatra +* Do you really want/need VCR? A fake may be better: * Do you test so specifically that WebMock would be the better tool? -* Does your project have special needs for tweaks: https://blog.arkency.com/3-tips-to-tune-your-vcr-in-tests/ +* Does your project have special needs for tweaks: * How often do you want to re-record your cassettes? Out-of-date replays may give you a false sense of safety. * Where do you want to re-record your cassettes? Maybe nightly on the CI? diff --git a/ruby_on_rails/wallee.md b/ruby_on_rails/wallee.md index b4eec435..c1c83146 100644 --- a/ruby_on_rails/wallee.md +++ b/ruby_on_rails/wallee.md @@ -273,7 +273,7 @@ Be aware that this is quite integrated with the business logic of your app, e.g. let(:wallee_transaction_id) { "194681414" } - it "goes the 😊 path" do + it "goes the happy path" do create(:shop_order, wallee_transaction_id: wallee_transaction_id) post wallee_webhook_path, env: {"HTTP_X_SIGNATURE" => "fake"}, diff --git a/ruby_on_rails/wicked_pdf.md b/ruby_on_rails/wicked_pdf.md index 4c34f6f7..f017b99f 100644 --- a/ruby_on_rails/wicked_pdf.md +++ b/ruby_on_rails/wicked_pdf.md @@ -2,7 +2,7 @@ Can be used to generate PDFs and supports HTML to PDF. -:warning: Up to now, Wicked PDF does not support Bootstrap 4, so if you want to use Bootstrap 4 Templates, use another library :warning: +> :warning: Up to now, Wicked PDF does not support Bootstrap 4, so if you want to use Bootstrap 4 Templates, use another library. * Add `gem 'wicked_pdf'` to the main section of `Gemfile` * Add `gem 'wkhtmltopdf-binary'` to `group :development, :test` @@ -20,7 +20,7 @@ By default, it adds no layout, you you may want to add a layout: render pdf: <>, print_media_type: true, layout: 'pdf', disposition: 'attachment' ``` -:warning: Consider using a job-runner to not block the server during creation of PDFs. +> :warning: Consider using a job-runner to not block the server during creation of PDFs. ## Heroku @@ -29,4 +29,4 @@ If you need Arial, you can add the following buildpack on Heroku: `https://github.com/propertybase/heroku-buildpack-fonts` -:warning: Make sure you add this as a first buildpack before `heroku/ruby`! +> :warning: Make sure you add this as a first buildpack before `heroku/ruby`! diff --git a/slack_and_notifications.md b/slack_and_notifications.md index b562c025..a2590526 100644 --- a/slack_and_notifications.md +++ b/slack_and_notifications.md @@ -18,7 +18,8 @@ One notification you may want to receive on this channel is about when a new dep order to do that you must be an admin of the Renuo Slack Organisation. If you are not an admin, ask wg-operations to do it for you communicating the `[project-name]`. -:warning: **You must have already setup [Automatic Deployment through SemaphoreCI](ruby_on_rails/configure_ci.md)** :warning: +> :warning: **You must have already setup [Automatic Deployment through SemaphoreCI](ruby_on_rails/configure_ci.md).** + If you used Renuo CLI to configure SemaphoreCI, the notifications should be already created. For manual setup, follow these steps: 1. Open the global Notifications settings (`https://renuo.semaphoreci.com/notifications`) diff --git a/sparkpost_and_mailtrap.md b/sparkpost_and_mailtrap.md index 3575e069..d05a0b7f 100644 --- a/sparkpost_and_mailtrap.md +++ b/sparkpost_and_mailtrap.md @@ -1,6 +1,6 @@ # SparkPost & Mailtrap -⚠️ Always use subaccounts in Sparkpost! +> :warning: Always use subaccounts in Sparkpost! > Otherwise there may be compliance issues which can lead to the closing down of the whole Renuo account. @@ -28,8 +28,7 @@ ## Sparkpost -:warning: -Always use subaccounts for the project, so that the whole account doesn't get suspended / blocked in case of compliance issues! +> :warning: Always use subaccounts for the project, so that the whole account doesn't get suspended / blocked in case of compliance issues! 1. Go to and log in with the credentials for sparkpost+_enviroment_@renuo.ch found in the credential store diff --git a/templates/README.md b/templates/README.md index 7a88d9a6..539e15b6 100644 --- a/templates/README.md +++ b/templates/README.md @@ -4,10 +4,10 @@ Short project description ## Environments -| Branch | Domain | Deployment | -| ------- | ------------------------------------- | ---------------| -| develop | https://`[project-name]`-develop.renuoapp.ch | auto | -| main | https://`[project-name]`-main.renuoapp.ch | release | +| Branch | Domain | Deployment | +| ------- | ------------------------------------------ | ---------------| +| develop | https://[project-name]-develop.renuoapp.ch | auto | +| main | https://[project-name]-main.renuoapp.ch | release | ## Setup From 3a47c6069d1bed67f07404736a81333e55493e22 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Thu, 30 Apr 2026 11:52:15 +0200 Subject: [PATCH 04/14] Normalize all callouts to GitHub-flavored alert syntax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Convert every blockquote-style note/warning/tip/important into the GitHub `> [!XXX]` form so the docs render consistently: - `> **Note:**` / `> _Note_:` / `**Note:**` → `> [!NOTE]` - `> ⚠️ ...` / `:warning:`-bracketed callouts → `> [!WARNING]` - `> :exclamation:` / `**:exclamation:` → `> [!IMPORTANT]` - `> :bulb:` → `> [!TIP]` - `> ⭐️` template-provided markers and `> ✨` Rails-default markers (semantically informational) → `> [!NOTE]` - `ℹ️ _..._` → `> [!NOTE]` Decorative emoji in headings, links, and celebratory inline lines (e.g. `:tada:`, `:fire:`, `:gem:`) are out of scope here and live in feature/emoji-cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 5 +++-- google_analytics.md | 3 ++- naming_conventions.md | 3 ++- ruby_on_rails/README.md | 9 ++++++--- ruby_on_rails/app_initialisation.md | 3 ++- ruby_on_rails/configure_ci.md | 3 ++- ruby_on_rails/depfu.md | 3 ++- ruby_on_rails/devise.md | 3 ++- ruby_on_rails/linting_and_automatic_check.md | 3 ++- ruby_on_rails/rspec.md | 11 +++++++---- ruby_on_rails/suggested_libraries.md | 9 ++++++--- ruby_on_rails/wicked_pdf.md | 9 ++++++--- slack_and_notifications.md | 3 ++- sparkpost_and_mailtrap.md | 8 ++++---- 14 files changed, 48 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 9c2de9cc..b34e2ede 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,9 @@ inner workings of Renuo. **You are always welcome to challenge the guide and improve it with a Pull Request.** -**Do not blindly follow this guide, always think about what you are doing and why. -If you think something is wrong or simply outdated, improve this guide with a Pull Request.** +> [!IMPORTANT] +> Do not blindly follow this guide, always think about what you are doing and why. +> If you think something is wrong or simply outdated, improve this guide with a Pull Request. Thank you for your work and have fun! :tada: diff --git a/google_analytics.md b/google_analytics.md index b3b90d6e..8cb2c802 100644 --- a/google_analytics.md +++ b/google_analytics.md @@ -33,7 +33,8 @@ script which you can find [here](https://developers.google.com/analytics/devguid Make sure you insert this script at the end of the `` tag of the page (not in the ``). -> **Note:** There is a default IP anonymization feature in GA4. We no longer need to perform this step manually. +> [!NOTE] +> There is a default IP anonymization feature in GA4. We no longer need to perform this step manually. ## b) Ruby rack-tracker diff --git a/naming_conventions.md b/naming_conventions.md index 78ee8283..b2f64ee2 100644 --- a/naming_conventions.md +++ b/naming_conventions.md @@ -18,7 +18,8 @@ asked to do the same. * Use `[project-name]-[purpose]-[branch]` for deployed projects (e.g. one11-web-main). * Use `[project-name]-local-[user]-[rails_env]` for local names which interact with online services (e.g. S3). -> **Note:** Previously on Heroku, the convention was to use `[project-name]-[branch]-[purpose]` for deployed projects (e.g. kingschair-main-assets). This has been updated due to deplo.io. +> [!NOTE] +> Previously on Heroku, the convention was to use `[project-name]-[branch]-[purpose]` for deployed projects (e.g. kingschair-main-assets). This has been updated due to deplo.io. ## Examples diff --git a/ruby_on_rails/README.md b/ruby_on_rails/README.md index c438d965..f7db8787 100644 --- a/ruby_on_rails/README.md +++ b/ruby_on_rails/README.md @@ -4,14 +4,17 @@ This setup covers a pure, monolithic Rails application. This is the most frequent type of application at [Renuo](https://renuo.ch) and is probably the easiest to set up. The application (and its GitHub repo) will be named after the `[project-name]` you chose before. -> **Note:** Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) +> [!NOTE] +> Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) -> **Note:** Have you decided if you need two environments (develop and main) or just one? +> [!NOTE] +> 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 bear 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. -> :bulb: **Tip:** Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. +> [!TIP] +> Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. --- diff --git a/ruby_on_rails/app_initialisation.md b/ruby_on_rails/app_initialisation.md index 3e86b7de..644c4b8d 100644 --- a/ruby_on_rails/app_initialisation.md +++ b/ruby_on_rails/app_initialisation.md @@ -18,7 +18,8 @@ rails new [project-name] --database=postgresql --skip-kamal --skip-ci --skip-act ``` where the `project-name` is exactly the one you chose before. -> :warning: You may want to choose a different database than Postgres, but most of the time this will be your choice.\ +> [!WARNING] +> You may want to choose a different database than Postgres, but most of the time this will be your choice. > 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.\ diff --git a/ruby_on_rails/configure_ci.md b/ruby_on_rails/configure_ci.md index f0faa154..65ec7c10 100644 --- a/ruby_on_rails/configure_ci.md +++ b/ruby_on_rails/configure_ci.md @@ -4,7 +4,8 @@ At Renuo we **always** use a CI (Continuous Integration) system to test our appl that all the tests pass before building and releasing a new version through our CD system. Our projects use [SemaphoreCI](). -> _Are you using **Gitlab**? Have a look at [this example](./gitlab_capybara_selenium.md) instead (and elaborate)._ +> [!NOTE] +> Are you using **Gitlab**? Have a look at [this example](./gitlab_capybara_selenium.md) instead (and elaborate). Before configuring the CI, you should already have a Git Repository with the code, a `bin/check` command to execute, and the main branches already pushed and ready to be tested. diff --git a/ruby_on_rails/depfu.md b/ruby_on_rails/depfu.md index acdfc78b..8b55e7c9 100644 --- a/ruby_on_rails/depfu.md +++ b/ruby_on_rails/depfu.md @@ -17,7 +17,8 @@ Enable minor engine updates. ![Depfu Engine Updates](../images/depfu_engine_updates.png) -> **Note:** If you are using Heroku, the latest Ruby / node version may not yet +> [!NOTE] +> If you are using Heroku, the latest Ruby / node version may not yet > be available on their platform, so you may need to delay the upgrade. Check the > following GitHub repositories to see if Heroku added support already: diff --git a/ruby_on_rails/devise.md b/ruby_on_rails/devise.md index 3dfcfbb2..81abf266 100644 --- a/ruby_on_rails/devise.md +++ b/ruby_on_rails/devise.md @@ -1,6 +1,7 @@ # Devise -> :warning: If you are going to use devise we suggest you to [send_emails](send_emails.md) first. +> [!WARNING] +> If you are going to use devise we suggest you to [send_emails](send_emails.md) first. * Add the following gem `gem 'devise'` and install it diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index 82b4c91d..d6817aa5 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -51,7 +51,8 @@ end ## SCSS lint -> **Note:** Your Semaphore configuration might have to be adjusted if you decide to use `npm`. +> [!NOTE] +> Your Semaphore configuration might have to be adjusted if you decide to use `npm`. To lint the SASS/SCSS files in our project you can use the `stylelint` npm package. diff --git a/ruby_on_rails/rspec.md b/ruby_on_rails/rspec.md index 7aadbd20..08eb642d 100644 --- a/ruby_on_rails/rspec.md +++ b/ruby_on_rails/rspec.md @@ -1,6 +1,7 @@ # Setup RSpec -> **Note:** The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. +> [!NOTE] +> The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. > Rails 8.1 does ship `capybara` and `selenium-webdriver` in the `:test` group by default. There is no need to add those manually when using the template. Even though Rails uses Minitest per default, RSpec is the *de-facto* standard at Renuo. @@ -156,7 +157,8 @@ config.generators { |g| g.test_framework :rspec } * Add the line `bundle exec parallel_rspec` to `bin/check` -> **Note:** If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: +> [!NOTE] +> If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: ![CleanShot 2021-06-25 at 16 54 22](https://user-images.githubusercontent.com/1319150/123443347-1bbcae80-d5d6-11eb-8ba5-0d2c9ae4a37c.gif) @@ -170,8 +172,9 @@ We are now going to write a first test to ensure that the whole configuration is Commit and push your changes! 🎉 -> ⭐️ The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html).\ -> To customize the health check and add additional checks, you can override the `Rails::HealthController` class.\ +> [!NOTE] +> The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html). +> To customize the health check and add additional checks, you can override the `Rails::HealthController` class. > You can find an example that also checks the database connection [in this file](../templates/app/controllers/rails/health_controller.rb). ## Verify diff --git a/ruby_on_rails/suggested_libraries.md b/ruby_on_rails/suggested_libraries.md index 6cad8d0e..8e0aeb49 100644 --- a/ruby_on_rails/suggested_libraries.md +++ b/ruby_on_rails/suggested_libraries.md @@ -3,9 +3,11 @@ Here is an hopefully up-to-date version of gems which we strongly suggest to include in your project. Please include them or find a good reason not to. -> :exclamation: Please follow the guide of each of these libraries to know how to properly install them. +> [!IMPORTANT] +> Please follow the guide of each of these libraries to know how to properly install them. -> :bulb: **Tip:** Do you know all of them? Do you know why we'd like them to be included? +> [!TIP] +> Do you know all of them? Do you know why we'd like them to be included? ```rb gem 'simple_form' @@ -25,4 +27,5 @@ group :production do end ``` -> :bulb: **Tip:** To install `simple_form`, run `rails generate simple_form:install --bootstrap` (omit the option if not using Bootstrap) after adding it to your Gemfile. +> [!TIP] +> To install `simple_form`, run `rails generate simple_form:install --bootstrap` (omit the option if not using Bootstrap) after adding it to your Gemfile. diff --git a/ruby_on_rails/wicked_pdf.md b/ruby_on_rails/wicked_pdf.md index f017b99f..2ecba75e 100644 --- a/ruby_on_rails/wicked_pdf.md +++ b/ruby_on_rails/wicked_pdf.md @@ -2,7 +2,8 @@ Can be used to generate PDFs and supports HTML to PDF. -> :warning: Up to now, Wicked PDF does not support Bootstrap 4, so if you want to use Bootstrap 4 Templates, use another library. +> [!WARNING] +> Up to now, Wicked PDF does not support Bootstrap 4, so if you want to use Bootstrap 4 Templates, use another library. * Add `gem 'wicked_pdf'` to the main section of `Gemfile` * Add `gem 'wkhtmltopdf-binary'` to `group :development, :test` @@ -20,7 +21,8 @@ By default, it adds no layout, you you may want to add a layout: render pdf: <>, print_media_type: true, layout: 'pdf', disposition: 'attachment' ``` -> :warning: Consider using a job-runner to not block the server during creation of PDFs. +> [!WARNING] +> Consider using a job-runner to not block the server during creation of PDFs. ## Heroku @@ -29,4 +31,5 @@ If you need Arial, you can add the following buildpack on Heroku: `https://github.com/propertybase/heroku-buildpack-fonts` -> :warning: Make sure you add this as a first buildpack before `heroku/ruby`! +> [!WARNING] +> Make sure you add this as a first buildpack before `heroku/ruby`! diff --git a/slack_and_notifications.md b/slack_and_notifications.md index a2590526..cf046c2b 100644 --- a/slack_and_notifications.md +++ b/slack_and_notifications.md @@ -18,7 +18,8 @@ One notification you may want to receive on this channel is about when a new dep order to do that you must be an admin of the Renuo Slack Organisation. If you are not an admin, ask wg-operations to do it for you communicating the `[project-name]`. -> :warning: **You must have already setup [Automatic Deployment through SemaphoreCI](ruby_on_rails/configure_ci.md).** +> [!WARNING] +> You must have already setup [Automatic Deployment through SemaphoreCI](ruby_on_rails/configure_ci.md). If you used Renuo CLI to configure SemaphoreCI, the notifications should be already created. For manual setup, follow these steps: diff --git a/sparkpost_and_mailtrap.md b/sparkpost_and_mailtrap.md index d05a0b7f..064e3d85 100644 --- a/sparkpost_and_mailtrap.md +++ b/sparkpost_and_mailtrap.md @@ -1,8 +1,7 @@ # SparkPost & Mailtrap -> :warning: Always use subaccounts in Sparkpost! - -> Otherwise there may be compliance issues which can lead to the closing down of the whole Renuo account. +> [!WARNING] +> Always use subaccounts in Sparkpost! Otherwise there may be compliance issues which can lead to the closing down of the whole Renuo account. ## Introduction @@ -28,7 +27,8 @@ ## Sparkpost -> :warning: Always use subaccounts for the project, so that the whole account doesn't get suspended / blocked in case of compliance issues! +> [!WARNING] +> Always use subaccounts for the project, so that the whole account doesn't get suspended / blocked in case of compliance issues! 1. Go to and log in with the credentials for sparkpost+_enviroment_@renuo.ch found in the credential store From 15425cc84df07bfa65942bfb033af1c01e0f5ab0 Mon Sep 17 00:00:00 2001 From: Dani Bengl <53896675+cb341@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:28:31 +0200 Subject: [PATCH 05/14] Replace emoji shortcodes with unicode emoji and drop emojify step (#445) Replace decorative shortcodes (:tada:, :fire:, :cop:, :white_check_mark:, :bulb:, :gem:, :exclamation:, :warning:, :smile:, :mailbox:) with unicode emoji directly in source markdown. Drop the Emojify Book step from both GitHub Actions workflows since shortcode expansion is no longer needed. Co-authored-by: Claude Opus 4.7 (1M context) --- ruby_on_rails/linting_and_automatic_check.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index d6817aa5..7bb5df8c 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -9,8 +9,6 @@ Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the fi > ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). -> ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). - Renuocop is based on Standard Ruby and is a set of rules that we use to lint our Ruby code. You can execute it and correct the issues you'll find. From f67c92c5568d62894446f75c2128516b5a91f242 Mon Sep 17 00:00:00 2001 From: Chris <76159444+hunchr@users.noreply.github.com> Date: Wed, 20 May 2026 11:48:48 +0200 Subject: [PATCH 06/14] Update local setup docs (#450) --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b34e2ede..766cb5b2 100644 --- a/README.md +++ b/README.md @@ -37,9 +37,10 @@ Before the team can start working on a project, you need: ## Serving the Documentation Locally -To view this documentation on your machine, run the following command: +To view this documentation on your machine, run the following commands: ```sh +brew install mdbook mdbook serve ``` From 6cd5e207fd304e3a3ee059804049db037fb3f02e Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Wed, 20 May 2026 12:17:18 +0200 Subject: [PATCH 07/14] Linearize the Application Setup Guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructure the docs so the guide reads as a single sequential walkthrough, and fold in the related content updates the restructure surfaced. Linearization (the spine of the change): - Top-level README: replace the single "Ruby on Rails" link with a four-phase "How to Use This Guide" roadmap; drop the outdated "Some Notes on the Side" intro, the "As an appendix" sentence, the "We want you to know..." line and the "Thank you" outro; reorder the "Do not blindly follow" and "challenge the guide" callouts up front; promote the basic-requirements bullet list to a "## What Needs to Be Ready" section. - SUMMARY: regroup pages under Before You Start / Rails Application Setup (Step 1–5) / Guides & Recipes / Services / Reference. Move `Create a GitHub Repository` into Step 1, split the Setup section into Step 1 (Create the App) and Step 2 (Deploy the App), add `AppSignal` to Step 4 and `Wallee Payment` / `Content Security Policy` / `I18n` to Guides & Recipes; move `Checklist`, `Go Live!` and the templates under Reference. - ruby_on_rails/README: insert `## Step 1: Create the App` … `## Step 5: Customer Plan Services` and `## Guides & Recipes` around the existing lists; switch the Guides & Recipes list from ordered to bulleted with an intro line that flags it as non-sequential; add a `> :bulb: **Tip:**` block explaining the ✨ convention; insert `---` separators around Guides & Recipes; drop the dead `[README](compile_readme.md)` link and the redundant "Some services should be configured accordingly..." preamble. Content updates the linearization surfaced: - Drop the now-dead `ruby_on_rails/compile_readme.md` page. - Drop the broken `home_controller.rb` reference in cucumber.md that the RSpec template never shipped. - `first_git_push.md`: rewrite to acknowledge that `rails new` already creates the local git repo and initial commit; link back to the previous step instead of the file path. - `create_application_server_deploio.md`: shorten the "For further configuration" paragraph and surface the Rails guide first. - `configure_git_repository.md`: rewrite the Rules/Rulesets block around a `main` / `non-main` split (covers feature branches and long-living branches like `redesign`), reorder the Pull Requests checklist to match the GitHub UI, drop the trailing long-living-environment note (now redundant), drop the `(AFTER SETTING UP SEMAPHORE)` aside. - `create_git_repository.md`: rename the page title from "Create a Git Repository" to "Create a GitHub Repository" to match the new SUMMARY entry. - `linting_and_automatic_check.md`: add `> ✨` template-supplied markers to Renuocop and Brakeman, add a new Bundler-audit section, drop the now-redundant "It's already included in your Gemfile by default" line. - `rspec.md`: add a `> **Note:**` block clarifying that the Renuo Rails template does NOT set up RSpec. - `app_initialisation.md`: add `# may vary` comments on the example `time_zone` / `default_locale` values; switch the example `config.generators.apply_rubocop_autocorrect_after_generate!` line to the Rails 8 block form; rewrite the final "commit all your changes" bullet to "you're ready for the next step". No prose / formatting / emoji changes here — those live in feature/docs-phrasing and feature/emoji-cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 26 +++++++----- SUMMARY.md | 4 +- ruby_on_rails/README.md | 42 ++++++++++---------- ruby_on_rails/first_git_push.md | 4 +- ruby_on_rails/linting_and_automatic_check.md | 11 +++-- ruby_on_rails/rspec.md | 17 ++++---- 6 files changed, 53 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 766cb5b2..cf399d09 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,22 @@ # Renuo Application Setup Guide -This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set up apps. +This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set-up apps. We are a [Rails company](https://rubyonrails.org/foundation), so the most value probably will be found in the parts concerning Rails. But anyways you'll also find a lot about the inner workings of Renuo. +If you are reading this document, it means that you have to setup a new application. +A new project started and it's now time to set everything up so that **everyone**, +in your team, **can start working on it**. + +This document will try to be as minimalist as possible and provide you with all the steps to set up the application as +fast as possible. There are things, in Renuo projects, which are mandatory, other that are suggested. +This guide is the result of more than ten years of experience, so this means three things: it's very robust, very opinionated, and possibly very outdated. + **You are always welcome to challenge the guide and improve it with a Pull Request.** -> [!IMPORTANT] -> Do not blindly follow this guide, always think about what you are doing and why. -> If you think something is wrong or simply outdated, improve this guide with a Pull Request. +**:exclamation: Do not blindly follow this guide, always think about what you are doing and why. +If you think something is wrong or simply outdated, improve this guide with a Pull Request.** Thank you for your work and have fun! :tada: @@ -26,21 +33,20 @@ The guide is structured as a linear walkthrough. Follow it from top to bottom wh Before the team can start working on a project, you need: -* A git repository containing the project +* An existing *git* repository containing the project * Two branches: *main* and *develop* (or just *main* for internal projects) * A README with essential information about the application -* Convenience scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` +* Convenience-scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` * One running, green test -* CI ready, running and green for all branches -* CD ready and running for all branches +* Continuous integration (*CI*) ready, running and green for all branches +* Continuous deployment (*CD*) ready and running for all branches * The application deployed for all branches ## Serving the Documentation Locally -To view this documentation on your machine, run the following commands: +To view this documentation on your machine, run the following command: ```sh -brew install mdbook mdbook serve ``` diff --git a/SUMMARY.md b/SUMMARY.md index ebe44feb..d2fa93da 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -14,10 +14,10 @@ - [Step 1: Create the App]() - [Initialise the Rails App](ruby_on_rails/app_initialisation.md) - - [Create a GitHub Repository](create_git_repository.md) + - [Create a GitHub Repository](create_github_repository.md) - [Push to Git Repository](ruby_on_rails/first_git_push.md) - [Initialise Gitflow](ruby_on_rails/initialise_gitflow.md) - - [Configure Git Repository](configure_git_repository.md) + - [Configure GitHub Repository](configure_github_repository.md) - [Step 2: Deploy the App]() - [Create an Application Server (Deploio)](ruby_on_rails/create_application_server_deploio.md) - [Create an Application Server (Heroku)](ruby_on_rails/create_application_server_heroku.md) diff --git a/ruby_on_rails/README.md b/ruby_on_rails/README.md index f7db8787..c2c5121e 100644 --- a/ruby_on_rails/README.md +++ b/ruby_on_rails/README.md @@ -1,8 +1,8 @@ # Ruby On Rails - Application Setup Guide -This setup covers a pure, monolithic Rails application. -This is the most frequent type of application at [Renuo](https://renuo.ch) and is probably the easiest to set up. -The application (and its GitHub repo) will be named after the `[project-name]` you chose before. +This setup will cover a pure, monolithic Rails Applications. +This is the most frequent type of application we have at [Renuo](https://renuo.ch) and is probably also the easiest to setup. +The application (and relative GitHub repo) will be named after the `[project-name]` you chose before. > [!NOTE] > Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) @@ -10,11 +10,10 @@ The application (and its GitHub repo) will be named after the `[project-name]` y > [!NOTE] > 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 bear the risk of having a bug in an internal project, but we cannot do that for a customer. +> 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. -> [!TIP] -> Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. +> :bulb: **Tip:** Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. --- @@ -23,29 +22,30 @@ The application (and its GitHub repo) will be named after the `[project-name]` y 1. [Initialise the Rails Application](app_initialisation.md) 1. [Push to Git Repository](first_git_push.md) 1. [Initialise Gitflow](initialise_gitflow.md) -1. [Configure GitHub Repository](../configure_git_repository.md) +1. [Configure Github Repository](../configure_github_repository.md) ## Step 2: Deploy the App 1. [Create an Application Server for Deploio](create_application_server_deploio.md) or [Create an Application Server for Heroku](create_application_server_heroku.md) -1. [Configure the CI/CD](configure_ci.md) +1. [Configure the CI / CD](configure_ci.md) -Your app should now be up and running on all environments. +Once here, your app should be up and running on all environments. ## Step 3: Quality Tools -Set up the tools that help your team maintain high quality throughout development. +It's now time to introduce some more tools which will help you and the team to keep a high quality during the project development. 1. [RSpec](rspec.md) 1. [Linting and automatic checks](linting_and_automatic_check.md) -1. [Gems and libraries](suggested_libraries.md) +1. [Gems and libraries :gem:](suggested_libraries.md) 1. [Cloudflare](cloudflare.md) -Your team can now start working on the project. +:tada: Finally you are ready to start working on you new project! :tada: ## Step 4: Monitoring & Protection -Set these up while the rest of the team starts working. Most are not optional, but they don't block other work. +While everyone starts working there are some more things which you should setup. +Most are not optional, but the rest of the team can start working even if those are not in place yet. 1. [AppSignal](appsignal.md) 1. [Sentry](sentry.md) (optional) @@ -69,7 +69,7 @@ Bookmark the project on [Redmine](https://dashboard.renuo.ch/redmine_projects) a The following are not part of the sequential setup. Use them as needed for your project. -* [Run JavaScript tests with Jest](jest.md) +* [Run Javascript tests with Jest](jest.md) * [Pull Requests Template](../templates/pull_requests_template.md) * [Slack and Project Notifications](../slack_and_notifications.md) * [Send emails](send_emails.md) @@ -78,18 +78,18 @@ The following are not part of the sequential setup. Use them as needed for your * [Cucumber](cucumber.md) * [Object storage](object_storage.md) * awesome_print `gem 'awesome_print'` -* [Bootstrap](bootstrap.md) -* [FontAwesome](font_awesome.md) -* [Bullet](bullet.md) `gem 'bullet'` -* [Lograge](appsignal.md#lograge) `gem 'lograge'` -* Rack Tracker (Google Analytics) `gem 'rack-tracker'` → see [Google Analytics](../google_analytics.md) +* [bootstrap](bootstrap.md) +* [font-awesome](font_awesome.md) +* [bullet](bullet.md) `gem 'bullet'` +* [lograge](appsignal.md#lograge) `gem 'lograge'` +* Rack Tracker (Google Analytics) `gem 'rack-tracker'` --> see [Google Analytics](../google_analytics.md) * Favicons * [Rack CORS](https://github.com/cyu/rack-cors) * [Rack Attack](https://github.com/rack/rack-attack#installing) -* [Hotjar](hotjar.md) +* [:fire: Hotjar](hotjar.md) * SEO * redirect non-www to www * Header tags -* [Wicked PDF](wicked_pdf.md) `gem wicked_pdf` +* [wicked pdf](wicked_pdf.md) `gem wicked_pdf` * [Recaptcha v3](recaptcha.md) * [Wallee Payment Integration](wallee.md) diff --git a/ruby_on_rails/first_git_push.md b/ruby_on_rails/first_git_push.md index c5c1f824..d74910b6 100644 --- a/ruby_on_rails/first_git_push.md +++ b/ruby_on_rails/first_git_push.md @@ -1,8 +1,8 @@ # Push to Git Repository -By now `rails new` has already initialised the local git repository and created an initial commit for you. This step pushes that commit to the GitHub repository you created in the [previous step](../create_git_repository.md). +By now `rails new` has already initialised the local git repository and created an initial commit for you. This step pushes that commit to the GitHub repository you created in the [previous step](../create_github_repository.md). -If you used `hub create -p renuo/[project-name]`, the `origin` remote is already set. Otherwise, add it: +If you used `gh repo create renuo/[project-name] --private --source=. --remote=origin`, the `origin` remote is already set. Otherwise, add it: ```sh git remote add origin git@github.com:renuo/[project-name].git diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index 7bb5df8c..3085a2eb 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -1,11 +1,11 @@ -# Linting and automatic checks ✅ +# Linting and automatic checks :white_check_mark: All Renuo projects contain (and your project must contain as well) the following linters. Every linter consists of a gem (usually) and a command to add to our `bin/fastcheck` script. Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the final version of it. -## Renuocop 👮 +## Renuocop :cop: > ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). @@ -19,7 +19,7 @@ You can execute it and correct the issues you'll find. > ✨ Ships with Rails 8.1 by default. -Add it to the `bin/fastcheck` script: +Add it to the `bin/fastcheck` script. ```sh bundle exec brakeman -q -z --no-summary --no-pager @@ -49,8 +49,7 @@ end ## SCSS lint -> [!NOTE] -> Your Semaphore configuration might have to be adjusted if you decide to use `npm`. +> _Note_: Your Semaphore configuration might have to be adjusted if you decide to use `npm`. To lint the SASS/SCSS files in our project you can use the `stylelint` npm package. @@ -171,4 +170,4 @@ The templates folder contains a template for the eslint configuration. ## All Good! -Now your `bin/fastcheck` is not that fast anymore 😄 +Now your `bin/fastcheck` is not that fast anymore :smile: diff --git a/ruby_on_rails/rspec.md b/ruby_on_rails/rspec.md index 08eb642d..de09e35e 100644 --- a/ruby_on_rails/rspec.md +++ b/ruby_on_rails/rspec.md @@ -1,7 +1,6 @@ # Setup RSpec -> [!NOTE] -> The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. +> **Note:** The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. > Rails 8.1 does ship `capybara` and `selenium-webdriver` in the `:test` group by default. There is no need to add those manually when using the template. Even though Rails uses Minitest per default, RSpec is the *de-facto* standard at Renuo. @@ -157,24 +156,22 @@ config.generators { |g| g.test_framework :rspec } * Add the line `bundle exec parallel_rspec` to `bin/check` -> [!NOTE] -> If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: +> **Note**: If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: ![CleanShot 2021-06-25 at 16 54 22](https://user-images.githubusercontent.com/1319150/123443347-1bbcae80-d5d6-11eb-8ba5-0d2c9ae4a37c.gif) -## ✅ Our first (green) test +## :white_check_mark: Our first (green) test We are now going to write a first test to ensure that the whole configuration is working: -* `bin/check` should be green ✅ +* `bin/check` should be green :white_check_mark: * Write the test [`spec/system/health_spec.rb`](../templates/spec/system/health_spec.rb) * Run `bin/check` and the test should pass and coverage is 100%. -Commit and push your changes! 🎉 +Commit and push your changes! :tada: -> [!NOTE] -> The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html). -> To customize the health check and add additional checks, you can override the `Rails::HealthController` class. +> ⭐️ The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html).\ +> To customize the health check and add additional checks, you can override the `Rails::HealthController` class.\ > You can find an example that also checks the database connection [in this file](../templates/app/controllers/rails/health_controller.rb). ## Verify From 01dd683fe2aa077871ad64ef7a29991c97aca515 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Wed, 20 May 2026 14:52:46 +0200 Subject: [PATCH 08/14] Phrasing and formatting cleanup across guides MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Touch only the wording, callout syntax, and inline formatting in the guides — no structural / content changes (those live in the parent commit). On top of the original "normalize all callouts to GitHub-flavored alert syntax" pass, this also pulls in the smaller prose / formatting touch-ups that were previously mixed into the docs-restructure commit: - Convert remaining note / warning / tip / important callouts to the `> [!XXX]` form (incl. `:warning:`-bracketed, `> :bulb: **Tip:**`, `> ⚠️`, plain `**Note:**`, `> _Note_:`, `ℹ️ _..._`). - Wrap bare URLs in `<...>` or markdown links. - Replace `-->` arrows with `→`. - Capitalise product / language names that survived the restructure (`Bootstrap`, `Bullet`, `Lograge`, `Wicked PDF`, `JavaScript`, `GitHub`, `1Password`, ...). - Tighten prose without changing meaning: `set-up` → `set up`, `Convenience-scripts` → `Convenience scripts`, `bare` → `bear`, drop trailing emoji on warning lines, drop "(*CI*)" abbreviation, rephrase the README intro / outro paragraphs in ruby_on_rails/README.md, etc. - Backtick-wrap `[project-name]` / `.ruby-version` identifiers. - Replace inline 😊 with "happy" in the wallee sample spec. - Align the markdown table column widths in templates/README.md. - Inline the deploio command example as a fenced sh block. - Convert the suggested_libraries Tip / Important callouts. Decorative emoji shortcodes (`:tada:`, `:fire:`, `:gem:`, `:cop:`, `:white_check_mark:`, `:smile:`, `:mailbox:`, ...) are intentionally left untouched — they live in feature/emoji-cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 15 ++++---- ruby_on_rails/README.md | 38 ++++++++++---------- ruby_on_rails/linting_and_automatic_check.md | 5 +-- ruby_on_rails/rspec.md | 11 +++--- 4 files changed, 37 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index cf399d09..e8770b22 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Renuo Application Setup Guide -This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set-up apps. +This repo is the [Renuo](https://www.renuo.ch) collection of best-practices to set up apps. We are a [Rails company](https://rubyonrails.org/foundation), so the most value probably will be found in the parts concerning Rails. But anyways you'll also find a lot about the inner workings of Renuo. @@ -15,8 +15,9 @@ This guide is the result of more than ten years of experience, so this means thr **You are always welcome to challenge the guide and improve it with a Pull Request.** -**:exclamation: Do not blindly follow this guide, always think about what you are doing and why. -If you think something is wrong or simply outdated, improve this guide with a Pull Request.** +> [!IMPORTANT] +> Do not blindly follow this guide, always think about what you are doing and why. +> If you think something is wrong or simply outdated, improve this guide with a Pull Request. Thank you for your work and have fun! :tada: @@ -33,13 +34,13 @@ The guide is structured as a linear walkthrough. Follow it from top to bottom wh Before the team can start working on a project, you need: -* An existing *git* repository containing the project +* A git repository containing the project * Two branches: *main* and *develop* (or just *main* for internal projects) * A README with essential information about the application -* Convenience-scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` +* Convenience scripts: `bin/setup`, `bin/check`, `bin/fastcheck`, `bin/run` * One running, green test -* Continuous integration (*CI*) ready, running and green for all branches -* Continuous deployment (*CD*) ready and running for all branches +* CI ready, running and green for all branches +* CD ready and running for all branches * The application deployed for all branches ## Serving the Documentation Locally diff --git a/ruby_on_rails/README.md b/ruby_on_rails/README.md index c2c5121e..d0ad38f4 100644 --- a/ruby_on_rails/README.md +++ b/ruby_on_rails/README.md @@ -1,8 +1,8 @@ # Ruby On Rails - Application Setup Guide -This setup will cover a pure, monolithic Rails Applications. -This is the most frequent type of application we have at [Renuo](https://renuo.ch) and is probably also the easiest to setup. -The application (and relative GitHub repo) will be named after the `[project-name]` you chose before. +This setup covers a pure, monolithic Rails application. +This is the most frequent type of application at [Renuo](https://renuo.ch) and is probably the easiest to set up. +The application (and its GitHub repo) will be named after the `[project-name]` you chose before. > [!NOTE] > Have you chosen a `[project-name]` yet? If not, please do so now. Check our [Naming Conventions](../naming_conventions.md) @@ -10,10 +10,11 @@ The application (and relative GitHub repo) will be named after the `[project-nam > [!NOTE] > 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. +> Why the difference? Because we can bear 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. -> :bulb: **Tip:** Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. +> [!TIP] +> Sections marked with ✨ are already set up by the Renuo Rails template or ship with Rails 8.1 by default. You only need to verify them, not install them. --- @@ -22,30 +23,29 @@ The application (and relative GitHub repo) will be named after the `[project-nam 1. [Initialise the Rails Application](app_initialisation.md) 1. [Push to Git Repository](first_git_push.md) 1. [Initialise Gitflow](initialise_gitflow.md) -1. [Configure Github Repository](../configure_github_repository.md) +1. [Configure GitHub Repository](../configure_github_repository.md) ## Step 2: Deploy the App 1. [Create an Application Server for Deploio](create_application_server_deploio.md) or [Create an Application Server for Heroku](create_application_server_heroku.md) -1. [Configure the CI / CD](configure_ci.md) +1. [Configure the CI/CD](configure_ci.md) -Once here, your app should be up and running on all environments. +Your app should now be up and running on all environments. ## Step 3: Quality Tools -It's now time to introduce some more tools which will help you and the team to keep a high quality during the project development. +Set up the tools that help your team maintain high quality throughout development. 1. [RSpec](rspec.md) 1. [Linting and automatic checks](linting_and_automatic_check.md) 1. [Gems and libraries :gem:](suggested_libraries.md) 1. [Cloudflare](cloudflare.md) -:tada: Finally you are ready to start working on you new project! :tada: +Your team can now start working on the project. ## Step 4: Monitoring & Protection -While everyone starts working there are some more things which you should setup. -Most are not optional, but the rest of the team can start working even if those are not in place yet. +Set these up while the rest of the team starts working. Most are not optional, but they don't block other work. 1. [AppSignal](appsignal.md) 1. [Sentry](sentry.md) (optional) @@ -69,7 +69,7 @@ Bookmark the project on [Redmine](https://dashboard.renuo.ch/redmine_projects) a The following are not part of the sequential setup. Use them as needed for your project. -* [Run Javascript tests with Jest](jest.md) +* [Run JavaScript tests with Jest](jest.md) * [Pull Requests Template](../templates/pull_requests_template.md) * [Slack and Project Notifications](../slack_and_notifications.md) * [Send emails](send_emails.md) @@ -78,11 +78,11 @@ The following are not part of the sequential setup. Use them as needed for your * [Cucumber](cucumber.md) * [Object storage](object_storage.md) * awesome_print `gem 'awesome_print'` -* [bootstrap](bootstrap.md) -* [font-awesome](font_awesome.md) -* [bullet](bullet.md) `gem 'bullet'` -* [lograge](appsignal.md#lograge) `gem 'lograge'` -* Rack Tracker (Google Analytics) `gem 'rack-tracker'` --> see [Google Analytics](../google_analytics.md) +* [Bootstrap](bootstrap.md) +* [FontAwesome](font_awesome.md) +* [Bullet](bullet.md) `gem 'bullet'` +* [Lograge](appsignal.md#lograge) `gem 'lograge'` +* Rack Tracker (Google Analytics) `gem 'rack-tracker'` → see [Google Analytics](../google_analytics.md) * Favicons * [Rack CORS](https://github.com/cyu/rack-cors) * [Rack Attack](https://github.com/rack/rack-attack#installing) @@ -90,6 +90,6 @@ The following are not part of the sequential setup. Use them as needed for your * SEO * redirect non-www to www * Header tags -* [wicked pdf](wicked_pdf.md) `gem wicked_pdf` +* [Wicked PDF](wicked_pdf.md) `gem wicked_pdf` * [Recaptcha v3](recaptcha.md) * [Wallee Payment Integration](wallee.md) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index 3085a2eb..bc94b716 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -19,7 +19,7 @@ You can execute it and correct the issues you'll find. > ✨ Ships with Rails 8.1 by default. -Add it to the `bin/fastcheck` script. +Add it to the `bin/fastcheck` script: ```sh bundle exec brakeman -q -z --no-summary --no-pager @@ -49,7 +49,8 @@ end ## SCSS lint -> _Note_: Your Semaphore configuration might have to be adjusted if you decide to use `npm`. +> [!NOTE] +> Your Semaphore configuration might have to be adjusted if you decide to use `npm`. To lint the SASS/SCSS files in our project you can use the `stylelint` npm package. diff --git a/ruby_on_rails/rspec.md b/ruby_on_rails/rspec.md index de09e35e..8262572a 100644 --- a/ruby_on_rails/rspec.md +++ b/ruby_on_rails/rspec.md @@ -1,6 +1,7 @@ # Setup RSpec -> **Note:** The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. +> [!NOTE] +> The Renuo Rails template does NOT set up RSpec. All steps on this page are manual. > Rails 8.1 does ship `capybara` and `selenium-webdriver` in the `:test` group by default. There is no need to add those manually when using the template. Even though Rails uses Minitest per default, RSpec is the *de-facto* standard at Renuo. @@ -156,7 +157,8 @@ config.generators { |g| g.test_framework :rspec } * Add the line `bundle exec parallel_rspec` to `bin/check` -> **Note**: If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: +> [!NOTE] +> If you want to debug a spec, you can simply uncomment the line `SELENIUM_DRIVER` in the .env to not run it headless: ![CleanShot 2021-06-25 at 16 54 22](https://user-images.githubusercontent.com/1319150/123443347-1bbcae80-d5d6-11eb-8ba5-0d2c9ae4a37c.gif) @@ -170,8 +172,9 @@ We are now going to write a first test to ensure that the whole configuration is Commit and push your changes! :tada: -> ⭐️ The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html).\ -> To customize the health check and add additional checks, you can override the `Rails::HealthController` class.\ +> [!NOTE] +> The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html). +> To customize the health check and add additional checks, you can override the `Rails::HealthController` class. > You can find an example that also checks the database connection [in this file](../templates/app/controllers/rails/health_controller.rb). ## Verify From b7d26c89f9c8608537cf864e0e7a3600f847cf75 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:29:22 +0200 Subject: [PATCH 09/14] Restore reviewed setup guidance --- ruby_on_rails/app_initialisation.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby_on_rails/app_initialisation.md b/ruby_on_rails/app_initialisation.md index 644c4b8d..56df5c7c 100644 --- a/ruby_on_rails/app_initialisation.md +++ b/ruby_on_rails/app_initialisation.md @@ -30,7 +30,7 @@ where the `project-name` is exactly the one you chose before. * Run `bundle exec rails db:migrate` to generate an empty `schema.rb` file. * Run `bin/setup` -* Then check your default Rails setup by running `bin/run` and visiting [http://[project-name].localhost:3000](http://[project-name].localhost:3000). +* Then check your default Rails setup by running `bin/run` and visiting `[project-name].localhost:3000`. You should be on Rails now, yay! * Finally check if [http://localhost:3000/up](http://localhost:3000/up) is green. @@ -79,8 +79,8 @@ 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 + config.time_zone = 'Zurich' + config.i18n.default_locale = :de ``` * Update your `config/environments/production.rb` settings: @@ -130,4 +130,4 @@ Check existing projects for an example of the usage. ## Finalising * Check if the following scripts run successfully: `bin/setup`, `bin/check`, `bin/run` -* If they do, you're ready for the next step. +* If they do, commit all your changes to the main branch with Git. From 88d0ade9d2c616a7e3e9655612e3422d99e17d9c Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:29:27 +0200 Subject: [PATCH 10/14] Remove deprecated guidance and restore Unicode emojis --- README.md | 2 +- SUMMARY.md | 1 - ruby_on_rails/README.md | 5 ++- ruby_on_rails/linting_and_automatic_check.md | 18 ++-------- ruby_on_rails/rspec.md | 6 ++-- ruby_on_rails/wicked_pdf.md | 35 -------------------- 6 files changed, 9 insertions(+), 58 deletions(-) delete mode 100644 ruby_on_rails/wicked_pdf.md diff --git a/README.md b/README.md index e8770b22..34322baf 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ This guide is the result of more than ten years of experience, so this means thr > Do not blindly follow this guide, always think about what you are doing and why. > If you think something is wrong or simply outdated, improve this guide with a Pull Request. -Thank you for your work and have fun! :tada: +Thank you for your work and have fun! 🎉 ## How to Use This Guide diff --git a/SUMMARY.md b/SUMMARY.md index d2fa93da..13454ff7 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -50,7 +50,6 @@ - [FontAwesome](ruby_on_rails/font_awesome.md) - [Bullet](ruby_on_rails/bullet.md) - [Hotjar](ruby_on_rails/hotjar.md) -- [Wicked PDF](ruby_on_rails/wicked_pdf.md) - [Recaptcha v3](ruby_on_rails/recaptcha.md) - [Wallee Payment](ruby_on_rails/wallee.md) - [Content Security Policy](ruby_on_rails/content_security_policy.md) diff --git a/ruby_on_rails/README.md b/ruby_on_rails/README.md index d0ad38f4..9eeca498 100644 --- a/ruby_on_rails/README.md +++ b/ruby_on_rails/README.md @@ -38,7 +38,7 @@ Set up the tools that help your team maintain high quality throughout developmen 1. [RSpec](rspec.md) 1. [Linting and automatic checks](linting_and_automatic_check.md) -1. [Gems and libraries :gem:](suggested_libraries.md) +1. [Gems and libraries 💎](suggested_libraries.md) 1. [Cloudflare](cloudflare.md) Your team can now start working on the project. @@ -86,10 +86,9 @@ The following are not part of the sequential setup. Use them as needed for your * Favicons * [Rack CORS](https://github.com/cyu/rack-cors) * [Rack Attack](https://github.com/rack/rack-attack#installing) -* [:fire: Hotjar](hotjar.md) +* [🔥 Hotjar](hotjar.md) * SEO * redirect non-www to www * Header tags -* [Wicked PDF](wicked_pdf.md) `gem wicked_pdf` * [Recaptcha v3](recaptcha.md) * [Wallee Payment Integration](wallee.md) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index bc94b716..dfd1a47d 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -1,11 +1,11 @@ -# Linting and automatic checks :white_check_mark: +# Linting and automatic checks ✅ All Renuo projects contain (and your project must contain as well) the following linters. Every linter consists of a gem (usually) and a command to add to our `bin/fastcheck` script. Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the final version of it. -## Renuocop :cop: +## Renuocop 👮 > ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). @@ -25,18 +25,6 @@ Add it to the `bin/fastcheck` script: bundle exec brakeman -q -z --no-summary --no-pager ``` -## Bundler-audit - -> ✨ Ships with Rails 8.1 by default. - -Scans `Gemfile.lock` for gems with known security vulnerabilities. Add it to the `bin/fastcheck` script: - -```sh -bundle exec bundler-audit check --update -``` - -Use `config/bundler-audit.yml` to ignore specific advisories if needed. - ## Mdl An optional check for markdown files. You can include it or not. Discuss within your team. @@ -171,4 +159,4 @@ The templates folder contains a template for the eslint configuration. ## All Good! -Now your `bin/fastcheck` is not that fast anymore :smile: +Now your `bin/fastcheck` is not that fast anymore 😄 diff --git a/ruby_on_rails/rspec.md b/ruby_on_rails/rspec.md index 8262572a..08eb642d 100644 --- a/ruby_on_rails/rspec.md +++ b/ruby_on_rails/rspec.md @@ -162,15 +162,15 @@ config.generators { |g| g.test_framework :rspec } ![CleanShot 2021-06-25 at 16 54 22](https://user-images.githubusercontent.com/1319150/123443347-1bbcae80-d5d6-11eb-8ba5-0d2c9ae4a37c.gif) -## :white_check_mark: Our first (green) test +## ✅ Our first (green) test We are now going to write a first test to ensure that the whole configuration is working: -* `bin/check` should be green :white_check_mark: +* `bin/check` should be green ✅ * Write the test [`spec/system/health_spec.rb`](../templates/spec/system/health_spec.rb) * Run `bin/check` and the test should pass and coverage is 100%. -Commit and push your changes! :tada: +Commit and push your changes! 🎉 > [!NOTE] > The default health check path for Rails is `/up`. [Learn more in the Rails guides](https://edgeapi.rubyonrails.org/classes/Rails/HealthController.html). diff --git a/ruby_on_rails/wicked_pdf.md b/ruby_on_rails/wicked_pdf.md deleted file mode 100644 index 2ecba75e..00000000 --- a/ruby_on_rails/wicked_pdf.md +++ /dev/null @@ -1,35 +0,0 @@ -# Wicked PDF - -Can be used to generate PDFs and supports HTML to PDF. - -> [!WARNING] -> Up to now, Wicked PDF does not support Bootstrap 4, so if you want to use Bootstrap 4 Templates, use another library. - -* Add `gem 'wicked_pdf'` to the main section of `Gemfile` -* Add `gem 'wkhtmltopdf-binary'` to `group :development, :test` -* Add `gem 'wkhtmltopdf-heroku'` to `group :production` - -By default, it adds no layout, you you may want to add a layout: - -* Create a `pdf.pdf.erb` -* Use the method to add stylesheets : `wicked_pdf_stylesheet_link_tag 'pdf', media: 'all'` -* Use the method `wicked_pdf_image_tag` to insert images to the layout. - -*Usage:* - -```rb -render pdf: <>, print_media_type: true, layout: 'pdf', disposition: 'attachment' -``` - -> [!WARNING] -> Consider using a job-runner to not block the server during creation of PDFs. - -## Heroku - -Ensure that fonts are installed on Heroku, otherwise the PDF will look different compared to the one generated locally. The fonts need to be installed with a buildpack and put in the `~/.fonts` folder. -If you need Arial, you can add the following buildpack on Heroku: - -`https://github.com/propertybase/heroku-buildpack-fonts` - -> [!WARNING] -> Make sure you add this as a first buildpack before `heroku/ruby`! From 0f93dbd46416063663361a5f0a44ef4a6af6f9ce Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:32:23 +0200 Subject: [PATCH 11/14] Use tip banners for template-provided tools --- ruby_on_rails/linting_and_automatic_check.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index dfd1a47d..ef632d55 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -7,6 +7,7 @@ Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the fi ## Renuocop 👮 +> [!TIP] > ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). Renuocop is based on Standard Ruby and is a set of rules that we use to lint our Ruby code. @@ -17,6 +18,7 @@ You can execute it and correct the issues you'll find. ## Brakeman +> [!TIP] > ✨ Ships with Rails 8.1 by default. Add it to the `bin/fastcheck` script: From 7b7b1a9ccc3b87f411c33f918432bef6e5e01b17 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:33:09 +0200 Subject: [PATCH 12/14] Format automatic adjustments as a list --- ruby_on_rails/app_initialisation.md | 38 ++++++++++++----------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/ruby_on_rails/app_initialisation.md b/ruby_on_rails/app_initialisation.md index 56df5c7c..1195c2e8 100644 --- a/ruby_on_rails/app_initialisation.md +++ b/ruby_on_rails/app_initialisation.md @@ -22,9 +22,13 @@ 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. > 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.\ +> [!TIP] +> ⭐️ 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 `bundle exec rails db:migrate` to generate an empty `schema.rb` file. @@ -41,27 +45,15 @@ Some other adjustments must be performed manually. ### Automatic adjustments -> ⭐️ The `config/database.yml` is updated to have a `collation: C.UTF-8` setting. -> This ensures deterministic, locale-independent sorting and avoids inconsistencies between local and production -> environments. +⭐️ This setup includes the following automatic adjustments: -> ⭐️ The Gemfile reads the required ruby version from the `.ruby-version` file. -> [This is used by Heroku to determine what version to use.](https://devcenter.heroku.com/articles/ruby-versions) -> Deploio reads the ruby version from the Gemfile, with the `.ruby-version` file inlined into it. See . - -> ⭐️ renuocop replaces the default rubocop-rails-omakase. We have our own set of rules at Renuo. -> You can discuss them at and you can also contribute to them. - -> ⭐️ A `bin/check` script is added to the project. This script will run all the tests of the project. -> It is used in our CI and can be used locally to check if everything is fine. You can customize it to your needs. - -> ⭐️ A `bin/fastcheck` script is added to the project. -> This script will run all the linters of the project. It is used in our CI and can be customized to your needs. -> It will be used as a hook before pushing to quickly check for linting issues. - -> ⭐️ A `bin/run` script is added to the project. This script will start the application. - -> ⭐️ `bin/check`, `bin/fastcheck` and `bin/run` are standardized tools for more convenience at Renuo. +* `config/database.yml` uses `collation: C.UTF-8` for deterministic, locale-independent sorting across local and production environments. +* The Gemfile reads the required Ruby version from `.ruby-version`. [Heroku uses this to determine the Ruby version](https://devcenter.heroku.com/articles/ruby-versions); Deploio reads the version from the Gemfile. +* Renuocop replaces `rubocop-rails-omakase` with Renuo's rules. You can discuss or contribute to them at . +* `bin/check` runs the project tests and is used in CI. +* `bin/fastcheck` runs linters in CI and before pushing. +* `bin/run` starts the application. +* `bin/check`, `bin/fastcheck`, and `bin/run` are standardized Renuo convenience tools. ### Secrets From 03019db23d99bcacf42f5a2de3b90de9c9a91619 Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:39:09 +0200 Subject: [PATCH 13/14] Remove redundant tool default notices --- ruby_on_rails/linting_and_automatic_check.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ruby_on_rails/linting_and_automatic_check.md b/ruby_on_rails/linting_and_automatic_check.md index ef632d55..7112ee3f 100644 --- a/ruby_on_rails/linting_and_automatic_check.md +++ b/ruby_on_rails/linting_and_automatic_check.md @@ -7,9 +7,6 @@ Check out the `bin/fastcheck` [fastcheck](../templates/bin/fastcheck) for the fi ## Renuocop 👮 -> [!TIP] -> ✨ Installed by the Renuo Rails template (replaces `rubocop-rails-omakase`). - Renuocop is based on Standard Ruby and is a set of rules that we use to lint our Ruby code. You can execute it and correct the issues you'll find. @@ -18,9 +15,6 @@ You can execute it and correct the issues you'll find. ## Brakeman -> [!TIP] -> ✨ Ships with Rails 8.1 by default. - Add it to the `bin/fastcheck` script: ```sh From 8708322093d420d54eb223174da5eb6665bdc77f Mon Sep 17 00:00:00 2001 From: Dani Bengl Date: Sun, 9 Aug 2026 20:39:24 +0200 Subject: [PATCH 14/14] Clarify suggested libraries guidance --- ruby_on_rails/suggested_libraries.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruby_on_rails/suggested_libraries.md b/ruby_on_rails/suggested_libraries.md index 8e0aeb49..bd6fdadd 100644 --- a/ruby_on_rails/suggested_libraries.md +++ b/ruby_on_rails/suggested_libraries.md @@ -6,8 +6,7 @@ Please include them or find a good reason not to. > [!IMPORTANT] > Please follow the guide of each of these libraries to know how to properly install them. -> [!TIP] -> Do you know all of them? Do you know why we'd like them to be included? +Before adding these libraries, make sure you understand why each one is included. ```rb gem 'simple_form'