Skip to content

Commit b47bd56

Browse files
Release discourse/base images for discourse/discourse stable branch (#864)
This commit updates our `build` workflow to push the following manifests which can be used to run Discourse against the stable branch. 1. discourse/base:2.0.$TIMESTAMP-stable 2. discourse/base:release-stable Co-authored-by: David Taylor <david@taylorhq.com>
1 parent 3384f2c commit b47bd56

File tree

5 files changed

+162
-79
lines changed

5 files changed

+162
-79
lines changed

.github/workflows/build.yml

Lines changed: 84 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -44,53 +44,82 @@ jobs:
4444
timeout-minutes: ${{ (github.event_name == 'schedule' && 90) || ((matrix.arch == 'arm64' && 45) || 30) }}
4545
needs: timestamp
4646
env:
47-
ARCH: ${{matrix.arch}}
4847
TIMESTAMP: ${{ needs.timestamp.outputs.timestamp }}
4948
steps:
5049
- uses: actions/checkout@v3
5150
with:
5251
fetch-depth: 1
53-
- name: build slim image
52+
53+
- name: build deps image
54+
working-directory: image
55+
run: |
56+
ruby auto_build.rb base_deps_${{ matrix.arch }}
57+
58+
- name: build slim image for `main` branch
59+
working-directory: image
60+
run: |
61+
ruby auto_build.rb base_slim_main_${{ matrix.arch }}
62+
63+
- name: tag slim image for `main` branch
5464
run: |
55-
cd image && ruby auto_build.rb base_slim_$ARCH
56-
- name: tag slim images
65+
docker tag discourse/base:build_slim_main_${{ matrix.arch }} discourse/base:2.0.${{ env.TIMESTAMP }}-slim-${{ matrix.arch }}
66+
67+
- name: build slim image for `stable` branch
68+
working-directory: image
5769
run: |
58-
docker tag discourse/base:build_slim_$ARCH discourse/base:2.0.$TIMESTAMP-slim-$ARCH
59-
docker tag discourse/base:build_slim_$ARCH discourse/base:slim-$ARCH
60-
- name: build release image
70+
ruby auto_build.rb base_slim_stable_${{ matrix.arch }}
71+
72+
- name: build release images for `main` branch
73+
working-directory: image
6174
run: |
62-
cd image && ruby auto_build.rb base_$ARCH
75+
ruby auto_build.rb base_release_main_${{ matrix.arch }}
76+
77+
- name: build release images for `stable` branch
78+
working-directory: image
79+
run: |
80+
ruby auto_build.rb base_release_stable_${{ matrix.arch }}
81+
6382
- name: tag release images
6483
run: |
65-
docker tag discourse/base:build_$ARCH discourse/base:2.0.$TIMESTAMP-$ARCH
66-
docker tag discourse/base:build_$ARCH discourse/base:release-$ARCH
67-
- name: build test_build image
84+
docker tag discourse/base:build_release_main_${{ matrix.arch }} discourse/base:2.0.${{ env.TIMESTAMP }}-main-${{ matrix.arch }}
85+
docker tag discourse/base:build_release_stable_${{ matrix.arch }} discourse/base:2.0.${{ env.TIMESTAMP }}-stable-${{ matrix.arch }}
86+
87+
- name: build test_build image for `main` branch
88+
working-directory: image
6889
run: |
69-
cd image && ruby auto_build.rb discourse_test_build_$ARCH
70-
- name: run specs
90+
ruby auto_build.rb discourse_test_build_${{ matrix.arch }}
91+
92+
- name: run specs for `main` branch
7193
run: |
72-
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build_$ARCH
73-
- name: build & tag dev image
94+
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build_${{ matrix.arch }}
95+
96+
- name: build & tag dev image for `main` branch
97+
working-directory: image
7498
run: |
75-
cd image && ruby auto_build.rb discourse_dev_$ARCH
76-
docker tag discourse/discourse_dev:build_$ARCH discourse/discourse_dev:$TIMESTAMP-$ARCH
99+
ruby auto_build.rb discourse_dev_${{ matrix.arch }}
100+
docker tag discourse/discourse_dev:build_${{ matrix.arch }} discourse/discourse_dev:${{ env.TIMESTAMP }}-${{ matrix.arch }}
101+
77102
- name: Print summary
78103
run: |
79104
docker images discourse/base
105+
80106
- name: push to dockerhub
81107
if: github.ref == 'refs/heads/main'
82108
env:
83109
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
84110
run: |
85111
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
86-
docker push discourse/base:2.0.$TIMESTAMP-slim-$ARCH
87-
docker push discourse/base:2.0.$TIMESTAMP-$ARCH
88-
docker push discourse/discourse_dev:$TIMESTAMP-$ARCH
112+
docker push discourse/base:2.0.${{ env.TIMESTAMP }}-slim-${{ matrix.arch }}
113+
docker push discourse/base:2.0.${{ env.TIMESTAMP }}-main-${{ matrix.arch }}
114+
docker push discourse/base:2.0.${{ env.TIMESTAMP }}-stable-${{ matrix.arch }}
115+
docker push discourse/discourse_dev:${{ env.TIMESTAMP }}-${{ matrix.arch }}
116+
89117
- name: Push discourse/base:aarch64 image for backwards compatibility
90118
if: (github.ref == 'refs/heads/main') && (matrix.arch == 'arm64')
91119
run: |
92-
docker tag discourse/base:2.0.$TIMESTAMP-$ARCH discourse/base:aarch64
120+
docker tag discourse/base:2.0.${{ env.TIMESTAMP }}-${{ matrix.arch }} discourse/base:aarch64
93121
docker push discourse/base:aarch64
122+
94123
push_multiarch_manifests:
95124
runs-on: ubuntu-latest
96125
needs: [base, timestamp]
@@ -103,40 +132,52 @@ jobs:
103132
docker login --username discoursebuild --password ${{ secrets.DOCKERHUB_PASSWORD }}
104133
105134
# Slim timestamped
106-
docker manifest create discourse/base:2.0.$TIMESTAMP-slim \
107-
-a discourse/base:2.0.$TIMESTAMP-slim-amd64 \
108-
-a discourse/base:2.0.$TIMESTAMP-slim-arm64
135+
docker manifest create discourse/base:2.0.${{ env.TIMESTAMP }}-slim \
136+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-slim-amd64 \
137+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-slim-arm64
109138
110139
# Slim release
111-
docker manifest create discourse/base:release-slim \
112-
-a discourse/base:2.0.$TIMESTAMP-slim-amd64 \
113-
-a discourse/base:2.0.$TIMESTAMP-slim-arm64
140+
docker manifest create discourse/base:slim \
141+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-slim-amd64 \
142+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-slim-arm64
114143
115-
# Full timestamped
116-
docker manifest create discourse/base:2.0.$TIMESTAMP \
117-
-a discourse/base:2.0.$TIMESTAMP-amd64 \
118-
-a discourse/base:2.0.$TIMESTAMP-arm64
144+
# Full Discourse `main` branch timestamped
145+
docker manifest create discourse/base:2.0.${{ env.TIMESTAMP }} \
146+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-main-amd64 \
147+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-main-arm64
119148
120-
# Full release
149+
# Full Discourse `stable` branch timestamped
150+
docker manifest create discourse/base:2.0.${{ env.TIMESTAMP }}-stable \
151+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-stable-amd64 \
152+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-stable-arm64
153+
154+
# Full Discourse `main` branch release
121155
docker manifest create discourse/base:release \
122-
-a discourse/base:2.0.$TIMESTAMP-amd64 \
123-
-a discourse/base:2.0.$TIMESTAMP-arm64
156+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-main-amd64 \
157+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-main-arm64
158+
159+
# Full Discourse `stable` branch release
160+
docker manifest create discourse/base:release-stable \
161+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-stable-amd64 \
162+
-a discourse/base:2.0.${{ env.TIMESTAMP }}-stable-arm64
124163
125164
# Dev timestamped
126-
docker manifest create discourse/discourse_dev:$TIMESTAMP \
127-
-a discourse/discourse_dev:$TIMESTAMP-amd64 \
128-
-a discourse/discourse_dev:$TIMESTAMP-arm64
165+
docker manifest create discourse/discourse_dev:${{ env.TIMESTAMP }} \
166+
-a discourse/discourse_dev:${{ env.TIMESTAMP }}-amd64 \
167+
-a discourse/discourse_dev:${{ env.TIMESTAMP }}-arm64
129168
130169
# Dev release
131170
docker manifest create discourse/discourse_dev:release \
132-
-a discourse/discourse_dev:$TIMESTAMP-amd64 \
133-
-a discourse/discourse_dev:$TIMESTAMP-arm64
171+
-a discourse/discourse_dev:${{ env.TIMESTAMP }}-amd64 \
172+
-a discourse/discourse_dev:${{ env.TIMESTAMP }}-arm64
134173
135-
docker manifest push discourse/base:2.0.$TIMESTAMP-slim
136-
docker manifest push discourse/base:release-slim
137-
docker manifest push discourse/base:2.0.$TIMESTAMP
174+
docker manifest push discourse/base:2.0.${{ env.TIMESTAMP }}-slim
175+
docker manifest push discourse/base:slim
176+
docker manifest push discourse/base:2.0.${{ env.TIMESTAMP }}
177+
docker manifest push discourse/base:2.0.${{ env.TIMESTAMP }}-stable
138178
docker manifest push discourse/base:release
139-
docker manifest push discourse/discourse_dev:$TIMESTAMP
179+
docker manifest push discourse/base:release-stable
180+
docker manifest push discourse/discourse_dev:${{ env.TIMESTAMP }}
140181
docker manifest push discourse/discourse_dev:release
141182
test:
142183
runs-on: ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}

image/auto_build.rb

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,86 @@
44
require "optparse"
55

66
images = {
7-
base_slim_amd64: {
7+
base_deps_amd64: {
88
name: "base",
9-
tag: "discourse/base:build_slim_amd64",
10-
extra_args: "-f slim.Dockerfile",
9+
tag: "discourse/base:build_deps_amd64",
10+
extra_args: "--target discourse_dependencies",
1111
},
12-
base_slim_arm64: {
12+
base_deps_arm64: {
1313
name: "base",
14-
tag: "discourse/base:build_slim_arm64",
15-
extra_args: "-f slim.Dockerfile --platform linux/arm64",
14+
tag: "discourse/base:build_deps_arm64",
15+
extra_args: "--platform linux/arm64 --target discourse_dependencies",
1616
},
17-
base_amd64: {
17+
base_slim_main_amd64: {
1818
name: "base",
19-
tag: "discourse/base:build_amd64",
20-
extra_args: "-f release.Dockerfile --build-arg=\"tag=build_slim_amd64\"",
19+
tag: "discourse/base:build_slim_main_amd64",
20+
extra_args: "--target discourse_slim",
21+
use_cache: true,
2122
},
22-
base_arm64: {
23+
base_slim_stable_amd64: {
2324
name: "base",
24-
tag: "discourse/base:build_arm64",
25-
extra_args: "-f release.Dockerfile --platform linux/arm64 --build-arg=\"tag=build_slim_arm64\"",
25+
tag: "discourse/base:build_slim_main_amd64",
26+
extra_args: "--target discourse_slim --build-arg=\"DISCOURSE_BRANCH=stable\"",
27+
use_cache: true,
28+
},
29+
base_slim_main_arm64: {
30+
name: "base",
31+
tag: "discourse/base:build_slim_main_arm64",
32+
extra_args: "--platform linux/arm64 --target discourse_slim",
33+
use_cache: true,
34+
},
35+
base_slim_stable_arm64: {
36+
name: "base",
37+
tag: "discourse/base:build_slim_stable_arm64",
38+
extra_args:
39+
"--platform linux/arm64 --target discourse_slim --build-arg=\"DISCOURSE_BRANCH=stable\"",
40+
use_cache: true,
41+
},
42+
base_release_main_amd64: {
43+
name: "base",
44+
tag: "discourse/base:build_release_main_amd64",
45+
extra_args: "--build-arg=\"DISCOURSE_BRANCH=main\" --target discourse_release",
46+
use_cache: true,
47+
},
48+
base_release_main_arm64: {
49+
name: "base",
50+
tag: "discourse/base:build_release_main_arm64",
51+
extra_args:
52+
"--platform linux/arm64 --build-arg=\"DISCOURSE_BRANCH=main\" --target discourse_release",
53+
use_cache: true,
54+
},
55+
base_release_stable_amd64: {
56+
name: "base",
57+
tag: "discourse/base:build_release_stable_amd64",
58+
extra_args: "--build-arg=\"DISCOURSE_BRANCH=stable\" --target discourse_release",
59+
use_cache: true,
60+
},
61+
base_release_stable_arm64: {
62+
name: "base",
63+
tag: "discourse/base:build_release_stable_arm64",
64+
extra_args:
65+
"--platform linux/arm64 --build-arg=\"DISCOURSE_BRANCH=stable\" --target discourse_release",
66+
use_cache: true,
2667
},
2768
discourse_test_build_amd64: {
2869
name: "discourse_test",
2970
tag: "discourse/discourse_test:build_amd64",
30-
extra_args: "--build-arg=\"from_tag=build_amd64\"",
71+
extra_args: "--build-arg=\"from_tag=build_release_main_amd64\"",
3172
},
3273
discourse_test_build_arm64: {
3374
name: "discourse_test",
3475
tag: "discourse/discourse_test:build_arm64",
35-
extra_args: "--platform linux/arm64 --build-arg=\"from_tag=build_arm64\"",
76+
extra_args: "--platform linux/arm64 --build-arg=\"from_tag=build_release_main_arm64\"",
3677
},
3778
discourse_dev_amd64: {
3879
name: "discourse_dev",
3980
tag: "discourse/discourse_dev:build_amd64",
40-
extra_args: "--build-arg=\"from_tag=build_slim_amd64\"",
81+
extra_args: "--build-arg=\"from_tag=build_slim_main_amd64\"",
4182
},
4283
discourse_dev_arm64: {
4384
name: "discourse_dev",
4485
tag: "discourse/discourse_dev:build_arm64",
45-
extra_args: "--platform linux/arm64 --build-arg=\"from_tag=build_slim_arm64\"",
86+
extra_args: "--platform linux/arm64 --build-arg=\"from_tag=build_slim_main_arm64\"",
4687
},
4788
}
4889

@@ -68,8 +109,9 @@ def run(command)
68109
def build(image, cli_args)
69110
lines =
70111
run(
71-
"cd #{image[:name]} && docker buildx build . --load --no-cache --tag #{image[:tag]} #{image[:extra_args] ? image[:extra_args] : ""} #{cli_args}",
112+
"cd #{image[:name]} && docker buildx build . --load #{image[:use_cache] == true ? "" : "--no-cache"} --tag #{image[:tag]} #{image[:extra_args] ? image[:extra_args] : ""} #{cli_args}",
72113
)
114+
73115
if lines[-1] =~ /successfully built/
74116
raise "Error building the image for #{image[:name]}: #{lines[-1]}"
75117
end

image/base/slim.Dockerfile renamed to image/base/Dockerfile

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# VERSION: release
33

44
ARG DEBIAN_RELEASE=bookworm
5-
FROM discourse/ruby:3.3.4-${DEBIAN_RELEASE}-slim
5+
FROM discourse/ruby:3.3.4-${DEBIAN_RELEASE}-slim AS discourse_dependencies
66

77
ARG DEBIAN_RELEASE
88
ENV PG_MAJOR=13 \
@@ -127,7 +127,24 @@ RUN rm -f /etc/service
127127
COPY etc/ /etc
128128
COPY sbin/ /sbin
129129

130+
FROM discourse_dependencies AS discourse_slim
131+
ARG DISCOURSE_BRANCH=main
132+
130133
# Discourse specific bits
131134
RUN install -dm 0755 -o discourse -g discourse /var/www/discourse &&\
132-
sudo -u discourse git clone --filter=tree:0 https://github.com/discourse/discourse.git /var/www/discourse &&\
135+
sudo -u discourse git clone --branch $DISCOURSE_BRANCH --filter=tree:0 https://github.com/discourse/discourse.git /var/www/discourse &&\
133136
gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' /var/www/discourse/Gemfile.lock)
137+
138+
FROM discourse_slim AS discourse_release
139+
ENV RAILS_ENV=production
140+
141+
RUN cd /var/www/discourse &&\
142+
sudo -u discourse bundle config --local deployment true &&\
143+
sudo -u discourse bundle config --local path ./vendor/bundle &&\
144+
sudo -u discourse bundle config --local without test development &&\
145+
sudo -u discourse bundle install --jobs $(($(nproc) - 1)) &&\
146+
find /var/www/discourse/vendor/bundle -name cache -not -path '*/gems/*' -type d -exec rm -rf {} + &&\
147+
find /var/www/discourse/vendor/bundle -name tmp -type d -exec rm -rf {} +
148+
149+
RUN cd /var/www/discourse &&\
150+
sudo -u discourse /bin/bash -c 'if [ -f yarn.lock ]; then yarn install --frozen-lockfile && yarn cache clean; else pnpm install --frozen-lockfile; fi'

image/base/release.Dockerfile

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

templates/web.template.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ env:
1212
DISCOURSE_DB_HOST:
1313
DISCOURSE_DB_PORT:
1414

15-
1615
params:
1716
version: tests-passed
18-
1917
home: /var/www/discourse
2018
upload_size: 10m
2119
nginx_worker_connections: 4000

0 commit comments

Comments
 (0)