Skip to content

Commit e4ec78c

Browse files
authored
Merge branch 'main' into codex/add-canonical_link_tag-helper-method
Signed-off-by: Robert Smith <[email protected]>
2 parents d65cc52 + 6e25092 commit e4ec78c

File tree

926 files changed

+45306
-2848
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

926 files changed

+45306
-2848
lines changed

.env.dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ APP_DEFAULT_LOCALE='en'
99
APP_AVAILABLE_LOCALES='es,en,fr'
1010
APP_FALLBACK_LOCALES='es,en,fr'
1111

12-
ES_PORT='9201'
12+
ES_PORT='9200'
1313
ES_HOST='http://elasticsearch'
1414
# ELASTICSEARCH_URL='http://elasticsearch:9201'
1515

.github/copilot-instructions.md

Lines changed: 219 additions & 58 deletions
Large diffs are not rendered by default.

.github/pull_request_template.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## Summary
2+
3+
Describe the change and the motivation.
4+
5+
## Checklist
6+
7+
- [ ] Tests added/updated and passing (`bin/ci`).
8+
- [ ] Lint and security checks (`rubocop`, `brakeman`, `bundler-audit`).
9+
- [ ] Documentation updated under `docs/` describing new/changed functionality.
10+
- [ ] Mermaid diagrams (`docs/*.mmd`) updated to reflect changes.
11+
- [ ] Rendered PNGs regenerated with `bin/render_diagrams` and committed.
12+
- [ ] For DB changes, included any needed backfills/dedupes and noted risks.
13+
14+
## Screenshots / Diagrams
15+
16+
If applicable, include screenshots or link to updated diagrams.
17+
18+
## Notes
19+
20+
Anything reviewers should be aware of (migration order, flags, feature toggles).
21+

.github/workflows/diagrams.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Diagrams Check
2+
3+
on:
4+
pull_request:
5+
branches: [ "**" ]
6+
7+
jobs:
8+
render-and-verify:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout
12+
uses: actions/checkout@v4
13+
14+
- name: Set up Node
15+
uses: actions/setup-node@v4
16+
with:
17+
node-version: '20'
18+
19+
- name: Render Mermaid diagrams
20+
run: |
21+
chmod +x bin/render_diagrams || true
22+
./bin/render_diagrams || true
23+
24+
- name: Verify rendered PNGs are up to date
25+
run: |
26+
CHANGED=$(git status --porcelain -- docs/diagrams/exports/png/*.png docs/diagrams/exports/svg/*.svg | wc -l)
27+
if [ "$CHANGED" -gt 0 ]; then
28+
echo "Diagram exports are out of date. Please run bin/render_diagrams and commit the updated files." >&2
29+
echo "Changed files:" >&2
30+
git status --porcelain -- docs/diagrams/exports/png/*.png docs/diagrams/exports/svg/*.svg >&2 || true
31+
exit 1
32+
fi
33+
shell: bash
34+

.github/workflows/i18n-health.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: i18n Translation Health Report
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- dev
8+
pull_request:
9+
branches:
10+
- main
11+
- dev
12+
13+
jobs:
14+
i18n-health:
15+
runs-on: ubuntu-latest
16+
env:
17+
# Ensure dev/test gems (incl. i18n-tasks) are installed
18+
BUNDLE_WITHOUT: ""
19+
BUNDLE_WITH: "development:test"
20+
if: github.event_name == 'push' || github.event_name == 'pull_request'
21+
steps:
22+
- name: Checkout code
23+
uses: actions/checkout@v4
24+
- name: Set up Ruby
25+
uses: ruby/setup-ruby@v1
26+
env:
27+
# Ensure bundler installs dev/test groups during caching step
28+
BUNDLE_WITHOUT: ""
29+
BUNDLE_WITH: "development:test"
30+
with:
31+
ruby-version: '3.4.4'
32+
bundler-cache: true
33+
- name: Verify i18n-tasks
34+
run: bundle exec i18n-tasks --version
35+
- name: Normalize locale files
36+
run: bin/i18n normalize
37+
- name: Run i18n checks
38+
run: bin/i18n check
39+
- name: Upload i18n health report
40+
if: always()
41+
run: bin/i18n health > i18n-health.txt
42+
continue-on-error: true
43+
- name: Archive i18n health report
44+
uses: actions/upload-artifact@v4
45+
with:
46+
name: i18n-health-report
47+
path: i18n-health.txt
48+
continue-on-error: true

.github/workflows/rubyonrails.yml

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ jobs:
1111
matrix:
1212
include:
1313
- ruby: '3.4.4'
14-
rails: '7.1.5.1'
14+
rails: '7.2.2.2'
1515
allowed_failure: false # ✅ required
16-
- ruby: '3.4.4'
17-
rails: '7.2.2.1'
18-
allowed_failure: false # ⚠️ allowed to fail
1916
- ruby: '3.4.4'
2017
rails: '8.0.2'
2118
allowed_failure: true # ⚠️ allowed to fail
@@ -24,6 +21,7 @@ jobs:
2421
RAILS_ENV: test
2522
DATABASE_URL: "postgis://rails:password@localhost:5432/rails_test"
2623
ES_HOST: "http://localhost"
24+
ELASTICSEARCH_URL: "http://localhost:9200"
2725
RAILS_VERSION: ${{ matrix.rails }}
2826

2927
services:
@@ -51,18 +49,18 @@ jobs:
5149
with:
5250
ruby-version: ${{ matrix.ruby }}
5351

54-
# Run the automatic bundle-install only on 7.1.
52+
# Run the automatic bundle-install only on 7.2.
5553
# For 7.2 / 8.0 it just sets up Ruby *and* restores a cache layer
5654
# that we’ll reuse in the later manual install.
57-
bundler-cache: ${{ matrix.rails == '7.1.5.1' }}
55+
bundler-cache: ${{ matrix.rails == '7.2.2.2' }}
5856

5957
# One cache bucket per Rails version so they don’t clobber each other.
6058
cache-version: rails-${{ matrix.rails }}
6159

6260
# Updating Rails can legitimately blow up on the experimental tracks,
6361
# so we allow that *step* to error out without failing the job.
6462
- name: Update Rails & install gems
65-
if: matrix.rails != '7.1.5.1'
63+
if: matrix.rails != '7.2.2.2'
6664
id: update
6765
run: |
6866
# turn off deployment mode
@@ -74,21 +72,52 @@ jobs:
7472
continue-on-error: ${{ matrix.allowed_failure }}
7573

7674
- name: Prepare DB schema
77-
if: (matrix.rails == '7.1.5.1') || steps.update.outcome == 'success'
75+
if: (matrix.rails == '7.2.2.2') || steps.update.outcome == 'success'
7876
run: |
7977
rm -f spec/dummy/tmp/pids/server.pid
8078
bundle exec rake -f spec/dummy/Rakefile db:schema:load
8179
continue-on-error: ${{ matrix.allowed_failure }}
8280

81+
- name: Wait for Elasticsearch
82+
if: (matrix.rails == '7.2.2.2') || steps.update.outcome == 'success'
83+
run: |
84+
echo "Waiting for Elasticsearch to be healthy..."
85+
curl -s "http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=60s" || (echo "Elasticsearch not healthy" && exit 1)
86+
87+
8388
- name: Run RSpec
84-
if: (matrix.rails == '7.1.5.1') || steps.update.outcome == 'success'
89+
if: (matrix.rails == '7.2.2.2') || steps.update.outcome == 'success'
8590
env:
8691
RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}
8792
run: |
8893
rm -f spec/dummy/tmp/pids/server.pid
8994
bundle exec rspec
9095
continue-on-error: ${{ matrix.allowed_failure }}
9196

97+
- name: Upload coverage report
98+
if: always()
99+
uses: actions/upload-artifact@v4
100+
with:
101+
name: coverage-report-ruby-${{ matrix.ruby }}-rails-${{ matrix.rails }}
102+
path: |
103+
coverage/
104+
105+
- name: Generate coverage badge
106+
if: ${{ github.ref == 'refs/heads/main' && success() }}
107+
continue-on-error: true
108+
run: |
109+
COVERAGE=$(jq -r '.result.covered_percent' coverage/.last_run.json)
110+
COLOR=$(node -e "cov=parseFloat(process.argv[1]);console.log(cov>=90?'green':cov>=75?'orange':'red')" $COVERAGE)
111+
npx badgen-cli --subject coverage --status ${COVERAGE}% --color $COLOR > coverage.svg
112+
113+
- name: Commit badge
114+
if: ${{ github.ref == 'refs/heads/main' && success() }}
115+
continue-on-error: true
116+
uses: stefanzweifel/git-auto-commit-action@v5
117+
with:
118+
commit_message: "chore: update coverage badge"
119+
file_pattern: coverage.svg
120+
92121
# ── style & security jobs (unchanged) ───────────────────────────────────────
93122
rubocop:
94123
runs-on: ubuntu-latest

.rubocop.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,23 @@ AllCops:
33
- 'bin/*'
44
- 'node_modules/**/*'
55
- 'spec/dummy/db/schema.rb'
6+
- 'db/schema.rb'
67
- 'vendor/**/*'
78
NewCops: enable
9+
TargetRubyVersion: 3.4
10+
plugins:
11+
- rubocop-rails
12+
- rubocop-rspec
13+
- rubocop-rspec_rails
14+
- rubocop-capybara
15+
- rubocop-factory_bot
816
Style/StringLiterals:
917
Exclude:
1018
- 'db/migrate/*'
19+
20+
Rails:
21+
Enabled: false
22+
Capybara:
23+
Enabled: false
24+
FactoryBot:
25+
Enabled: false

0 commit comments

Comments
 (0)