-
Notifications
You must be signed in to change notification settings - Fork 74
148 lines (122 loc) · 4.29 KB
/
main.yml
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
name: git-fame
on: push
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
pull-requests: write
jobs:
rubocop:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
- name: Set up Docker cache
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build Docker image with Ruby version
run: |
docker buildx create --use
docker buildx build --build-arg RUBY_VERSION=3.3 \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache,mode=max \
--load -t git-fame -f .devcontainer/Dockerfile .
- name: Run Rubocop
run: docker run --rm -v $(pwd):/workspace git-fame bundle exec rubocop
rspec:
runs-on: ${{ matrix.os }}
needs: rubocop
strategy:
matrix:
ruby: ["2.7", "3.0", "3.1", "3.2", "3.3"]
os: [ubuntu-latest, macos-latest]
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
install: true
- name: Set up Docker cache
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build Docker image with Ruby version
run: |
docker buildx create --use
docker buildx build --build-arg RUBY_VERSION=${{ matrix.ruby }} \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache,mode=max \
--load -t git-fame -f .devcontainer/Dockerfile .
- name: Run git-fame
run: docker run --rm -v $(pwd):/workspace git-fame bundle exec exe/git-fame --log-level debug
- name: Upload coverage to CodeClimate
if: runner.os != 'macos'
uses: paambaati/codeclimate-action@v9
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
CI: true
with:
coverageLocations: ${{ github.workspace }}/coverage/coverage.xml:cobertura
coverageCommand: docker run --rm -v $(pwd):/workspace git-fame bundle exec rspec --format RSpec::Github::Formatter
- name: Run RSpec
if: runner.os == 'macos'
run: docker run --rm -v $(pwd):/workspace git-fame bundle exec rspec --format RSpec::Github::Formatter
devcontainer:
runs-on: ubuntu-latest
needs: rubocop
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Set up DevContainer CLI
run: npm install -g @devcontainers/cli
- name: Build and start DevContainer
run: |
devcontainer build --workspace-folder .
devcontainer up --workspace-folder .
- name: Run tests inside DevContainer
run: devcontainer exec --workspace-folder . bundle exec rspec
release:
runs-on: ubuntu-latest
needs: rspec
if: github.ref == 'refs/heads/main'
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
ruby-version: 3.3
- name: Setup git
run: |
git config --global user.email "actions@github.com"
git config --global user.name "GitHub Actions"
- name: Install gem-release
run: gem install gem-release
- name: Install dependencies
run: bundle install --jobs 4 --retry 3
- name: Increment version
run: gem bump --version patch --tag --push --skip-ci --release --file lib/git_fame/version.rb --remote origin --branch main
env:
GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}