1+ name : CI
2+
3+ on :
4+ pull_request :
5+ push :
6+ branches : [ main ]
7+
8+ jobs :
9+ scan_ruby :
10+ runs-on : ubuntu-latest
11+
12+ steps :
13+ - name : Checkout code
14+ uses : actions/checkout@v4
15+
16+ - name : Set up Ruby
17+ uses : ruby/setup-ruby@v1
18+ with :
19+ ruby-version : .ruby-version
20+ bundler-cache : true
21+
22+ - name : Scan for common Rails security vulnerabilities using static analysis
23+ run : bin/brakeman --no-pager
24+
25+ scan_js :
26+ runs-on : ubuntu-latest
27+
28+ steps :
29+ - name : Checkout code
30+ uses : actions/checkout@v4
31+
32+ - name : Install packages
33+ run : |
34+ sudo apt-get update
35+ sudo apt-get install --no-install-recommends -y libvips-dev
36+
37+ - name : Set up Ruby
38+ uses : ruby/setup-ruby@v1
39+ with :
40+ ruby-version : .ruby-version
41+ bundler-cache : true
42+
43+ - name : Scan for security vulnerabilities in JavaScript dependencies
44+ run : bin/importmap audit
45+
46+ lint :
47+ runs-on : ubuntu-latest
48+ steps :
49+ - name : Checkout code
50+ uses : actions/checkout@v4
51+
52+ - name : Set up Ruby
53+ uses : ruby/setup-ruby@v1
54+ with :
55+ ruby-version : .ruby-version
56+ bundler-cache : true
57+
58+ - name : Lint code for consistent style
59+ run : bin/rubocop -f github
60+
61+ test :
62+ runs-on : ubuntu-latest
63+
64+ services :
65+ postgres :
66+ image : postgres:16
67+ env :
68+ POSTGRES_USER : postgres
69+ POSTGRES_PASSWORD : postgres
70+ POSTGRES_DB : expense_tracker_test
71+ ports :
72+ - 5432:5432
73+ options : >-
74+ --health-cmd pg_isready
75+ --health-interval 10s
76+ --health-timeout 5s
77+ --health-retries 5
78+
79+ steps :
80+ - name : Checkout code
81+ uses : actions/checkout@v4
82+
83+ - name : Set up Ruby
84+ uses : ruby/setup-ruby@v1
85+ with :
86+ ruby-version : .ruby-version
87+ bundler-cache : true
88+
89+ - name : Install system dependencies
90+ run : |
91+ sudo apt-get update
92+ sudo apt-get install --no-install-recommends -y \
93+ build-essential \
94+ git \
95+ libyaml-dev \
96+ pkg-config \
97+ libvips-dev
98+
99+ - name : Prepare test database
100+ env :
101+ RAILS_ENV : test
102+ DATABASE_URL : postgres://postgres:postgres@localhost:5432/expense_tracker_test
103+ run : |
104+ bundle exec rails db:create db:schema:load --trace
105+ # or use: bundle exec rails db:setup (if you have seed data for tests)
106+
107+ - name : Run RSpec tests
108+ env :
109+ RAILS_ENV : test
110+ DATABASE_URL : postgres://postgres:postgres@localhost:5432/expense_tracker_test
111+ run : bundle exec rspec
112+
113+ # Optional: upload screenshots / videos if you're using capybara + selenium/webdrivers
114+ # - name: Upload failed test artifacts
115+ # if: failure()
116+ # uses: actions/upload-artifact@v4
117+ # with:
118+ # name: test-failures
119+ # path: |
120+ # tmp/screenshots/
121+ # tmp/capybara/
122+ # if-no-files-found: ignore
0 commit comments