@@ -2,55 +2,137 @@ name: CI
22
33on :
44 push :
5- branches : [ main ]
5+ branches : [main, develop, release/** ]
66 pull_request :
7- branches : [ main ]
7+ branches : [main, develop]
8+
9+ permissions :
10+ actions : write
11+ contents : read
12+ id-token : write
13+ packages : write
814
915jobs :
1016 test :
1117 runs-on : ubuntu-latest
18+
1219 strategy :
20+ fail-fast : false
1321 matrix :
14- ruby-version : [' 2.7', ' 3.0', ' 3.1', ' 3.2', ' 3.3' ]
15-
22+ ruby-version : [" 2.7", " 3.0", " 3.1", " 3.2", " 3.3" ]
23+
1624 steps :
17- - uses : actions/checkout@v4
18-
19- - name : Set up Ruby ${{ matrix.ruby-version }}
20- uses : ruby/setup-ruby@v1
21- with :
22- ruby-version : ${{ matrix.ruby-version }}
23- bundler-cache : true
24-
25- - name : Run tests
26- run : bundle exec rake spec
27-
28- - name : Test CLI
29- run : bundle exec bin/gemplate --help
30-
31- publish :
32- needs : test
25+ - uses : actions/checkout@v4
26+
27+ - name : Set up Ruby ${{ matrix.ruby-version }}
28+ uses : ruby/setup-ruby@v1
29+ with :
30+ ruby-version : ${{ matrix.ruby-version }}
31+ bundler-cache : true
32+
33+ - name : Run tests with coverage
34+ run : bundle exec rspec
35+
36+ - name : Test CLI
37+ run : bundle exec bin/gemplate --help
38+
39+ - name : Upload coverage to Qlty
40+ if : matrix.ruby-version == '3.3'
41+ uses : qltysh/qlty-action/coverage@v1
42+ continue-on-error : true
43+ env :
44+ QLTY_COVERAGE_TOKEN : ${{ secrets.QLTY_COVERAGE_TOKEN }}
45+ with :
46+ oidc : true
47+ files : coverage/coverage.json
48+
49+ - name : Run Qlty code quality checks
50+ if : matrix.ruby-version == '3.3'
51+ run : |
52+ curl -sSfL https://qlty.sh | sh
53+ echo "$HOME/.qlty/bin" >> $GITHUB_PATH
54+ ~/.qlty/bin/qlty check || true
55+ continue-on-error : true
56+
57+ - name : Run RuboCop (Ruby 3.3 only)
58+ if : matrix.ruby-version == '3.3'
59+ run : bundle exec rubocop || true
60+ continue-on-error : true
61+
62+ security :
3363 runs-on : ubuntu-latest
34- if : github.event_name == 'push' && github.ref == 'refs/heads/main'
35-
64+
3665 steps :
37- - uses : actions/checkout@v4
38-
39- - name : Set up Ruby
40- uses : ruby/setup-ruby@v1
41- with :
42- ruby-version : ' 3.3'
43- bundler-cache : true
44-
45- - name : Build gem
46- run : gem build gemplate.gemspec
47-
48- - name : Publish to GitHub Packages
49- run : |
50- mkdir -p $HOME/.gem
51- touch $HOME/.gem/credentials
52- chmod 0600 $HOME/.gem/credentials
53- printf -- "---\n:github: Bearer ${GITHUB_TOKEN}\n" > $HOME/.gem/credentials
54- gem push --KEY github --host https://rubygems.pkg.github.com/TwilightCoders *.gem
55- env :
56- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
66+ - uses : actions/checkout@v4
67+
68+ - name : Set up Ruby
69+ uses : ruby/setup-ruby@v1
70+ with :
71+ ruby-version : " 3.3"
72+ bundler-cache : true
73+
74+ - name : Run bundle audit
75+ run : |
76+ gem install bundler-audit
77+ bundle audit --update || true
78+ continue-on-error : true
79+
80+ build :
81+ runs-on : ubuntu-latest
82+ needs : [test, security]
83+ if : github.event_name == 'push'
84+
85+ steps :
86+ - uses : actions/checkout@v4
87+
88+ - name : Set up Ruby
89+ uses : ruby/setup-ruby@v1
90+ with :
91+ ruby-version : " 3.3"
92+ bundler-cache : true
93+
94+ - name : Modify version for develop branch
95+ if : github.ref == 'refs/heads/develop'
96+ run : |
97+ SHORT_SHA=$(git rev-parse --short HEAD)
98+ sed -i "s/VERSION = '\([^']*\)'/VERSION = '\1.dev.${SHORT_SHA}'/" lib/gemplate/version.rb
99+ echo "VERSION_SUFFIX=.dev.${SHORT_SHA}" >> $GITHUB_ENV
100+
101+ - name : Modify version for release branch
102+ if : startsWith(github.ref, 'refs/heads/release/')
103+ run : |
104+ SHORT_SHA=$(git rev-parse --short HEAD)
105+ sed -i "s/VERSION = '\([^']*\)'/VERSION = '\1.rc.${SHORT_SHA}'/" lib/gemplate/version.rb
106+ echo "VERSION_SUFFIX=.rc.${SHORT_SHA}" >> $GITHUB_ENV
107+
108+ - name : Set version suffix for main
109+ if : github.ref == 'refs/heads/main'
110+ run : echo "VERSION_SUFFIX=" >> $GITHUB_ENV
111+
112+ - name : Build gem
113+ run : gem build gemplate.gemspec
114+
115+ - name : Get gem info
116+ id : gem_info
117+ run : |
118+ GEM_FILE=$(ls *.gem)
119+ GEM_VERSION=$(echo $GEM_FILE | sed 's/gemplate-\(.*\)\.gem/\1/')
120+ echo "gem_file=$GEM_FILE" >> $GITHUB_OUTPUT
121+ echo "gem_version=$GEM_VERSION" >> $GITHUB_OUTPUT
122+
123+ - name : Store gem artifact
124+ uses : actions/upload-artifact@v4
125+ with :
126+ name : gem-${{ steps.gem_info.outputs.gem_version }}
127+ path : " *.gem"
128+ retention-days : 30
129+
130+ - name : Create build summary
131+ run : |
132+ echo "## Gem Built Successfully 💎" >> $GITHUB_STEP_SUMMARY
133+ echo "- **Version**: ${{ steps.gem_info.outputs.gem_version }}" >> $GITHUB_STEP_SUMMARY
134+ echo "- **File**: ${{ steps.gem_info.outputs.gem_file }}" >> $GITHUB_STEP_SUMMARY
135+ echo "- **Branch**: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
136+ echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
137+ echo "" >> $GITHUB_STEP_SUMMARY
138+ echo "🚀 **Ready to publish!** Use the 'Manual Release' workflow to publish this gem." >> $GITHUB_STEP_SUMMARY
0 commit comments