Skip to content

Commit 1721c23

Browse files
authored
Refactor CI workflows (go-gitea#37487)
1. only trigger docker-dryrun arm64&riscv64 when dockerfile changes 2. de-duplicate "contents: read" permission for most workflows 3. merge various "lint-*" jobs into one job 4. add missing lint targets to the "lint" (all) target
1 parent 81692ce commit 1721c23

10 files changed

Lines changed: 98 additions & 192 deletions

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: docker-dryrun
2+
description: Composite action that performs the container build steps for a single platform.
3+
4+
inputs:
5+
platform:
6+
description: "The target platform: linux/amd64, linux/arm64, linux/riscv64."
7+
required: true
8+
9+
runs:
10+
using: composite
11+
steps:
12+
- uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
13+
- uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
14+
- name: Build regular image
15+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
16+
with:
17+
context: .
18+
platforms: ${{ inputs.platform }}
19+
push: false
20+
file: Dockerfile
21+
cache-from: type=registry,ref=ghcr.io/go-gitea/gitea:buildcache-rootful
22+
- name: Build rootless image
23+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
24+
with:
25+
context: .
26+
platforms: ${{ inputs.platform }}
27+
push: false
28+
file: Dockerfile.rootless
29+
cache-from: type=registry,ref=ghcr.io/go-gitea/gitea:buildcache-rootless

.github/workflows/cache-seeder.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ concurrency:
2727
group: cache-seeder
2828
cancel-in-progress: true
2929

30+
permissions:
31+
contents: read
32+
3033
jobs:
3134
gobuild:
3235
runs-on: ubuntu-latest
33-
permissions:
34-
contents: read
3536
steps:
3637
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3738
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -49,8 +50,6 @@ jobs:
4950

5051
lint:
5152
runs-on: ubuntu-latest
52-
permissions:
53-
contents: read
5453
strategy:
5554
fail-fast: false
5655
matrix:

.github/workflows/cron-renovate.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ concurrency:
1111
env:
1212
RENOVATE_VERSION: 43.141.5 # renovate: datasource=docker depName=ghcr.io/renovatebot/renovate
1313

14+
permissions:
15+
contents: read
16+
1417
jobs:
1518
cron-renovate:
1619
runs-on: ubuntu-latest
1720
if: github.repository == 'go-gitea/gitea' # prevent running on forks
1821
timeout-minutes: 30
19-
permissions:
20-
contents: read
2122
steps:
2223
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2324
- uses: renovatebot/github-action@83ec54fee49ab67d9cd201084c1ff325b4b462e4 # v46.1.10

.github/workflows/files-changed.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ on:
1515
value: ${{ jobs.detect.outputs.templates }}
1616
docker:
1717
value: ${{ jobs.detect.outputs.docker }}
18+
dockerfile:
19+
value: ${{ jobs.detect.outputs.dockerfile }}
1820
swagger:
1921
value: ${{ jobs.detect.outputs.swagger }}
2022
yaml:
@@ -24,19 +26,21 @@ on:
2426
e2e:
2527
value: ${{ jobs.detect.outputs.e2e }}
2628

29+
permissions:
30+
contents: read
31+
2732
jobs:
2833
detect:
2934
runs-on: ubuntu-latest
3035
timeout-minutes: 3
31-
permissions:
32-
contents: read
3336
outputs:
3437
backend: ${{ steps.changes.outputs.backend }}
3538
frontend: ${{ steps.changes.outputs.frontend }}
3639
docs: ${{ steps.changes.outputs.docs }}
3740
actions: ${{ steps.changes.outputs.actions }}
3841
templates: ${{ steps.changes.outputs.templates }}
3942
docker: ${{ steps.changes.outputs.docker }}
43+
dockerfile: ${{ steps.changes.outputs.dockerfile }}
4044
swagger: ${{ steps.changes.outputs.swagger }}
4145
yaml: ${{ steps.changes.outputs.yaml }}
4246
json: ${{ steps.changes.outputs.json }}
@@ -94,6 +98,10 @@ jobs:
9498
- "docker/**"
9599
- "Makefile"
96100
101+
dockerfile:
102+
- "Dockerfile"
103+
- "Dockerfile.rootless"
104+
97105
swagger:
98106
- "templates/swagger/v1_json.tmpl"
99107
- "templates/swagger/v1_input.json"

.github/workflows/part-docker-dryrun.yml

Lines changed: 0 additions & 35 deletions
This file was deleted.

.github/workflows/pull-compliance.yml

Lines changed: 24 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,17 @@ concurrency:
77
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
88
cancel-in-progress: true
99

10+
permissions:
11+
contents: read
12+
1013
jobs:
1114
files-changed:
1215
uses: ./.github/workflows/files-changed.yml
13-
permissions:
14-
contents: read
1516

1617
lint-backend:
1718
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true'
1819
needs: files-changed
1920
runs-on: ubuntu-latest
20-
permissions:
21-
contents: read
2221
steps:
2322
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2423
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -35,93 +34,40 @@ jobs:
3534
env:
3635
TAGS: bindata sqlite sqlite_unlock_notify
3736

38-
lint-templates:
39-
if: needs.files-changed.outputs.templates == 'true'
37+
lint-on-demand:
4038
needs: files-changed
4139
runs-on: ubuntu-latest
42-
permissions:
43-
contents: read
4440
steps:
4541
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
46-
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
47-
- run: uv python install 3.14
42+
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
43+
with:
44+
go-version-file: go.mod
45+
check-latest: true
46+
cache: false
4847
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
4948
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
5049
with:
5150
node-version: 24
5251
cache: pnpm
5352
cache-dependency-path: pnpm-lock.yaml
54-
- run: make deps-py
55-
- run: make deps-frontend
56-
- run: make lint-templates
5753

58-
lint-yaml:
59-
if: needs.files-changed.outputs.yaml == 'true'
60-
needs: files-changed
61-
runs-on: ubuntu-latest
62-
permissions:
63-
contents: read
64-
steps:
65-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
66-
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
67-
- run: uv python install 3.14
68-
- run: make deps-py
69-
- run: make lint-yaml
54+
- run: make lint-spell
7055

71-
lint-json:
72-
if: needs.files-changed.outputs.json == 'true'
73-
needs: files-changed
74-
runs-on: ubuntu-latest
75-
permissions:
76-
contents: read
77-
steps:
78-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
79-
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
80-
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
81-
with:
82-
node-version: 24
83-
cache: pnpm
84-
cache-dependency-path: pnpm-lock.yaml
85-
- run: make deps-frontend
86-
- run: make lint-json
56+
- if: needs.files-changed.outputs.templates == 'true' || needs.files-changed.outputs.yaml == 'true'
57+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
58+
- if: needs.files-changed.outputs.templates == 'true' || needs.files-changed.outputs.yaml == 'true'
59+
run: uv python install 3.14 && make deps-py lint-templates lint-yaml
8760

88-
lint-swagger:
89-
if: needs.files-changed.outputs.swagger == 'true'
90-
needs: files-changed
91-
runs-on: ubuntu-latest
92-
permissions:
93-
contents: read
94-
steps:
95-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
96-
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
97-
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
98-
with:
99-
node-version: 24
100-
cache: pnpm
101-
cache-dependency-path: pnpm-lock.yaml
102-
- run: make deps-frontend
103-
- run: make lint-swagger
61+
- if: needs.files-changed.outputs.docs == 'true' || needs.files-changed.outputs.swagger == 'true' || needs.files-changed.outputs.json == 'true'
62+
run: make deps-frontend lint-md lint-swagger lint-json
10463

105-
lint-spell:
106-
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' || needs.files-changed.outputs.actions == 'true' || needs.files-changed.outputs.docs == 'true' || needs.files-changed.outputs.templates == 'true'
107-
needs: files-changed
108-
runs-on: ubuntu-latest
109-
permissions:
110-
contents: read
111-
steps:
112-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
113-
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
114-
with:
115-
go-version-file: go.mod
116-
check-latest: true
117-
- run: make lint-spell
64+
- if: needs.files-changed.outputs.actions == 'true'
65+
run: make lint-actions
11866

11967
lint-go-windows:
12068
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true'
12169
needs: files-changed
12270
runs-on: ubuntu-latest
123-
permissions:
124-
contents: read
12571
steps:
12672
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
12773
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -144,8 +90,6 @@ jobs:
14490
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true'
14591
needs: files-changed
14692
runs-on: ubuntu-latest
147-
permissions:
148-
contents: read
14993
steps:
15094
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
15195
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -166,8 +110,6 @@ jobs:
166110
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true'
167111
needs: files-changed
168112
runs-on: ubuntu-latest
169-
permissions:
170-
contents: read
171113
steps:
172114
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
173115
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -186,8 +128,6 @@ jobs:
186128
if: needs.files-changed.outputs.frontend == 'true' || needs.files-changed.outputs.actions == 'true'
187129
needs: files-changed
188130
runs-on: ubuntu-latest
189-
permissions:
190-
contents: read
191131
steps:
192132
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
193133
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
@@ -206,8 +146,6 @@ jobs:
206146
if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.actions == 'true'
207147
needs: files-changed
208148
runs-on: ubuntu-latest
209-
permissions:
210-
contents: read
211149
steps:
212150
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
213151
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
@@ -217,13 +155,12 @@ jobs:
217155
cache: false
218156
- uses: ./.github/actions/go-cache
219157
with:
220-
cache-name: backend
221-
# no frontend build here as backend should be able to build
222-
# even without any frontend files
223-
- run: make deps-backend
224-
- run: go build -o gitea_no_gcc # test if build succeeds without the sqlite tag
158+
cache-name: compliance-backend
159+
- run: make deps-backend generate-go
160+
# no frontend build here as backend should be able to build, even without any frontend files
161+
# CGO is not used when cross-compile, so these steps also test if the code is compatible with CGO disabled
225162
- name: build-backend-arm64
226-
run: make backend # test cross compile
163+
run: go build -o gitea_linux_arm64
227164
env:
228165
GOOS: linux
229166
GOARCH: arm64
@@ -235,38 +172,7 @@ jobs:
235172
GOARCH: amd64
236173
TAGS: bindata gogit
237174
- name: build-backend-386
238-
run: go build -o gitea_linux_386 # test if compatible with 32 bit
175+
run: go build -o gitea_linux_386
239176
env:
240177
GOOS: linux
241178
GOARCH: 386
242-
243-
docs:
244-
if: needs.files-changed.outputs.docs == 'true' || needs.files-changed.outputs.actions == 'true'
245-
needs: files-changed
246-
runs-on: ubuntu-latest
247-
permissions:
248-
contents: read
249-
steps:
250-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
251-
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
252-
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
253-
with:
254-
node-version: 24
255-
cache: pnpm
256-
cache-dependency-path: pnpm-lock.yaml
257-
- run: make deps-frontend
258-
- run: make lint-md
259-
260-
actions:
261-
if: needs.files-changed.outputs.actions == 'true' || needs.files-changed.outputs.actions == 'true'
262-
needs: files-changed
263-
runs-on: ubuntu-latest
264-
permissions:
265-
contents: read
266-
steps:
267-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
268-
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
269-
with:
270-
go-version-file: go.mod
271-
check-latest: true
272-
- run: make lint-actions

0 commit comments

Comments
 (0)