-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (113 loc) · 3.41 KB
/
Copy pathmain.yml
File metadata and controls
130 lines (113 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: CI
on:
push:
branches:
- main
tags:
- v*
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '4.0'
bundler-cache: true
- name: Run RuboCop
run: bundle exec rubocop
- name: Check Ruby formatting with Syntax Tree
run: bundle exec stree check Gemfile Rakefile *.gemspec "lib/**/*.rb" "spec/**/*.rb"
test:
runs-on: ubuntu-latest
name: Ruby ${{ matrix.ruby }}
strategy:
fail-fast: false
matrix:
ruby:
- '3.3'
- '3.4'
- '4.0'
- 'jruby'
- 'truffleruby'
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Run tests
run: bundle exec rake spec
mutation:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref == 'refs/heads/main')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
persist-credentials: false
# `--since` walks git history; default shallow clone hides the base.
fetch-depth: 0
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '4.0'
bundler-cache: true
# On PR: mutate subjects changed since main.
# On push to main: mutate subjects changed by this push.
- name: Run mutant
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
since="origin/main"
else
since="${{ github.event.before }}"
# A force-push leaves `github.event.before` pointing to an
# unreachable commit; fall back to the previous commit on main.
if ! git cat-file -e "${since}^{commit}" 2>/dev/null; then
echo "Base ${since} not reachable; falling back to HEAD^"
since="HEAD^"
fi
fi
bin/mutant run --since "${since}"
publish:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs:
- lint
- test
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v6
with:
# bin/generate-release-notes needs prior tags and the commits
# between them to build the changelog.
fetch-depth: 0
- name: Release Gem
uses: discourse/publish-rubygems-action@v3
env:
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
GIT_EMAIL: team@discourse.org
GIT_NAME: discoursebot
- name: Create GitHub Release
run: |
VERSION=$(ruby -r ./lib/markbridge/version -e 'puts Markbridge::VERSION')
TAG="v${VERSION}"
if ! gh release view "${TAG}" > /dev/null 2>&1; then
NOTES=$(bin/generate-release-notes)
gh release create "${TAG}" --notes "${NOTES}" --latest
else
echo "Release ${TAG} already exists, skipping."
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}