Skip to content

Commit 642b63a

Browse files
authored
Merge branch 'discourse:main' into main
2 parents 94fe934 + 618ab51 commit 642b63a

58 files changed

Lines changed: 1438 additions & 608 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 198 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,239 @@ on:
44
- main
55
pull_request:
66
schedule:
7-
- cron: '0 0 * * *'
7+
- cron: "0 0 * * *"
8+
9+
concurrency:
10+
group: build-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }}
11+
cancel-in-progress: true
12+
13+
env:
14+
BUILDKIT_PROGRESS: plain
815

916
jobs:
1017
base:
11-
runs-on: [ubuntu-20.04]
18+
# `unbuntu-20.04-8core` for arch amd64 non-scheduled builds
19+
# `unbuntu-20.04` for arch amd64 scheduled builds
20+
# `unbuntu-20.04-8core-arm` for arch arm64 non-scheduled builds
21+
# `unbuntu-20.04-2core-arm` for arch arm64 scheduled builds
22+
runs-on: ubuntu-20.04${{ ((github.event_name != 'schedule') && '-8core') || (( matrix.arch == 'arm64' && '-2core' ) || '') }}${{ (matrix.arch == 'arm64') && '-arm' || '' }}
23+
strategy:
24+
matrix:
25+
arch: [amd64, arm64]
26+
timeout-minutes: ${{ (github.event_name != 'schedule' && 30) || ((matrix.arch == 'arm64' && 60) || 30) }}
1227
steps:
13-
- name: enable experimental docker features
28+
- name: Install Docker
29+
if: ${{ matrix.arch == 'arm64' }}
30+
run: |
31+
# Add Docker's official GPG key:
32+
sudo apt-get update
33+
sudo apt-get install ca-certificates curl
34+
sudo install -m 0755 -d /etc/apt/keyrings
35+
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
36+
sudo chmod a+r /etc/apt/keyrings/docker.asc
37+
38+
# Add the repository to Apt sources:
39+
echo \
40+
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
41+
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
42+
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
43+
sudo apt-get update
44+
45+
# Install Docker
46+
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
47+
48+
# Give the current user permission to run docker without sudo
49+
sudo usermod -aG docker $USER
50+
sudo apt-get install -y acl
51+
sudo setfacl --modify user:$USER:rw /var/run/docker.sock
52+
- name: Install Ruby
53+
if: ${{ matrix.arch == 'arm64' }}
1454
run: |
15-
sudo bash -c 'echo "{ \"cgroup-parent\": \"/actions_job\",\"experimental\":true}" > /etc/docker/daemon.json'
16-
sudo service docker restart
17-
docker version -f '{{.Server.Experimental}}'
18-
- uses: actions/checkout@v2
55+
sudo apt-get install -y ruby
56+
- uses: actions/checkout@v3
1957
with:
2058
fetch-depth: 1
21-
- name: build base image
59+
- name: Set arch helper output
60+
id: arch-helper
2261
run: |
23-
cd image && ruby auto_build.rb base
62+
echo "arch_postfix_dash=${{ (matrix.arch == 'arm64' && '-arm64') || '' }}" >> $GITHUB_OUTPUT
63+
echo "arch_postfix_underscore=${{ (matrix.arch == 'arm64' && '_arm64') || '' }}" >> $GITHUB_OUTPUT
64+
- name: build slim image
65+
run: |
66+
cd image && ruby auto_build.rb base_slim${{ steps.arch-helper.outputs.arch_postfix_underscore }}
67+
- name: tag slim images
68+
id: tag-images
69+
run: |
70+
TAG=`date +%Y%m%d-%H%M`
71+
echo "tag=$(echo $TAG)" >> $GITHUB_OUTPUT
72+
docker tag discourse/base:build_slim${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:2.0.$TAG-slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
73+
docker tag discourse/base:build_slim${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
74+
- name: build release image
75+
run: |
76+
cd image && ruby auto_build.rb base${{ steps.arch-helper.outputs.arch_postfix_underscore }}
77+
- name: tag amd64 release images
78+
run: |
79+
TAG=${{ steps.tag-images.outputs.tag }}
80+
docker tag discourse/base:build${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:2.0.$TAG${{ steps.arch-helper.outputs.arch_postfix_dash }}
81+
docker tag discourse/base:build${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }}
2482
- name: build test_build image
2583
run: |
26-
cd image && ruby auto_build.rb discourse_test_build
84+
cd image && ruby auto_build.rb discourse_test_build${{ steps.arch-helper.outputs.arch_postfix_underscore }}
2785
- name: run specs
2886
run: |
29-
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build
87+
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build${{ steps.arch-helper.outputs.arch_postfix_underscore }}
88+
- name: Print summary
89+
run: |
90+
docker images discourse/base
3091
- name: push to dockerhub
3192
if: success() && (github.ref == 'refs/heads/main')
3293
env:
3394
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
95+
run: |
96+
TAG=${{ steps.tag-images.outputs.tag }}
97+
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
98+
docker push discourse/base:2.0.$TAG-slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
99+
docker push discourse/base:slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
100+
docker push discourse/base:2.0.$TAG${{ steps.arch-helper.outputs.arch_postfix_dash }}
101+
docker push discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }}
102+
- name: Push discourse/base:aarch64 image for backwards compatibility
103+
if: success() && (github.ref == 'refs/heads/main') && (matrix.arch == 'arm64')
104+
run: |
105+
docker tag discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }} discourse/base:aarch64
106+
docker push discourse/base:aarch64
107+
base_bookworm:
108+
runs-on: ubuntu-20.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
109+
timeout-minutes: ${{ github.event_name != 'schedule' && 30 }}
110+
steps:
111+
- uses: actions/checkout@v3
112+
with:
113+
fetch-depth: 1
114+
- name: build slim image
115+
run: |
116+
cd image && ruby auto_build.rb base_slim_bookworm
117+
- name: tag slim images
118+
id: tag-images
34119
run: |
35120
TAG=`date +%Y%m%d-%H%M`
36-
docker tag discourse/base:build discourse/base:2.0.$TAG
37-
docker tag discourse/base:build discourse/base:release
121+
echo "tag=$(echo $TAG)" >> $GITHUB_OUTPUT
122+
docker tag discourse/base:build_slim_bookworm discourse/base:2.0.$TAG-slim-bookworm
123+
docker tag discourse/base:build_slim_bookworm discourse/base:slim-bookworm
124+
- name: build release image
125+
run: |
126+
cd image && ruby auto_build.rb base_bookworm
127+
- name: tag release images
128+
run: |
129+
TAG=${{ steps.tag-images.outputs.tag }}
130+
docker tag discourse/base:build_bookworm discourse/base:2.0.$TAG-bookworm
131+
docker tag discourse/base:build_bookworm discourse/base:release-bookworm
132+
- name: build test_build image
133+
run: |
134+
cd image && ruby auto_build.rb discourse_test_build_bookworm
135+
- name: run specs
136+
run: |
137+
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build_bookworm
138+
- name: Print summary
139+
run: |
140+
docker images discourse/base
141+
- name: push to dockerhub
142+
if: success() && (github.ref == 'refs/heads/main')
143+
env:
144+
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
145+
run: |
146+
TAG=${{ steps.tag-images.outputs.tag }}
38147
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
39-
docker push discourse/base:release
40-
docker push discourse/base:2.0.$TAG
148+
docker push discourse/base:2.0.$TAG-slim-bookworm
149+
docker push discourse/base:slim-bookworm
150+
docker push discourse/base:2.0.$TAG-bookworm
151+
docker push discourse/base:release-bookworm
41152
test:
42-
runs-on: [ubuntu-20.04]
153+
runs-on: ubuntu-20.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
154+
timeout-minutes: 30
43155
needs: base
156+
defaults:
157+
run:
158+
working-directory: image/discourse_test
44159
steps:
45-
- name: enable experimental docker features
46-
run: |
47-
sudo bash -c 'echo "{ \"cgroup-parent\": \"/actions_job\",\"experimental\":true}" > /etc/docker/daemon.json'
48-
sudo service docker restart
49-
docker version -f '{{.Server.Experimental}}'
50-
- uses: actions/checkout@v2
160+
- uses: actions/checkout@v3
51161
with:
52162
fetch-depth: 1
53-
- name: build discourse_test image
163+
- name: build discourse_test:slim
164+
run: |
165+
docker buildx build . --load \
166+
--build-arg from_tag=slim \
167+
--target base \
168+
--tag discourse/discourse_test:slim
169+
- name: build discourse_test:slim-browsers
54170
run: |
55-
cd image && ruby auto_build.rb discourse_test_public
171+
docker buildx build . --load \
172+
--build-arg from_tag=slim \
173+
--target with_browsers \
174+
--tag discourse/discourse_test:slim-browsers
175+
- name: build discourse_test:release
176+
run: |
177+
docker buildx build . --load \
178+
--build-arg from_tag=release \
179+
--target release \
180+
--tag discourse/discourse_test:release
181+
- name: Print summary
182+
run: |
183+
docker images discourse/discourse_test
56184
- name: push to dockerhub
57185
if: success() && (github.ref == 'refs/heads/main')
58186
env:
59187
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
60188
run: |
61189
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
190+
docker push discourse/discourse_test:slim
191+
docker push discourse/discourse_test:slim-browsers
62192
docker push discourse/discourse_test:release
193+
test_bookworm:
194+
runs-on: ubuntu-20.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
195+
timeout-minutes: 30
196+
needs: base_bookworm
197+
defaults:
198+
run:
199+
working-directory: image/discourse_test
200+
steps:
201+
- uses: actions/checkout@v3
202+
with:
203+
fetch-depth: 1
204+
- name: build discourse_test:slim-bookworm
205+
run: |
206+
docker buildx build . --load \
207+
--build-arg from_tag=slim-bookworm \
208+
--target base \
209+
--tag discourse/discourse_test:slim-bookworm
210+
- name: build discourse_test:slim-browsers-bookworm
211+
run: |
212+
docker buildx build . --load \
213+
--build-arg from_tag=slim-bookworm \
214+
--target with_browsers \
215+
--tag discourse/discourse_test:slim-browsers-bookworm
216+
- name: build discourse_test:release-bookworm
217+
run: |
218+
docker buildx build . --load \
219+
--build-arg from_tag=release-bookworm \
220+
--target release \
221+
--tag discourse/discourse_test:release-bookworm
222+
- name: Print summary
223+
run: |
224+
docker images discourse/discourse_test
225+
- name: push to dockerhub
226+
if: success() && (github.ref == 'refs/heads/main')
227+
env:
228+
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
229+
run: |
230+
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
231+
docker push discourse/discourse_test:slim-bookworm
232+
docker push discourse/discourse_test:slim-browsers-bookworm
233+
docker push discourse/discourse_test:release-bookworm
63234
dev:
64-
runs-on: [ubuntu-20.04]
235+
runs-on: ubuntu-20.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
236+
timeout-minutes: 30
65237
needs: base
66238
steps:
67-
- uses: actions/checkout@v2
239+
- uses: actions/checkout@v3
68240
with:
69241
fetch-depth: 1
70242
- name: build discourse_dev image

0 commit comments

Comments
 (0)