1414 BUILDKIT_PROGRESS : plain
1515 DISCOURSE_TURBO_RSPEC_RETRY_AND_LOG_FLAKY_TESTS : true
1616
17+
1718jobs :
19+ timestamp :
20+ runs-on : ubuntu-latest
21+ outputs :
22+ timestamp : ${{ steps.timestamp.outputs.timestamp }}
23+ steps :
24+ - id : timestamp
25+ run : |
26+ timestamp=`date +%Y%m%d-%H%M`
27+ echo "timestamp=$timestamp"
28+ echo "timestamp=$timestamp" >> $GITHUB_OUTPUT
29+
1830 base :
1931 # `unbuntu-22.04-8core` for arch amd64 non-scheduled builds
2032 # `unbuntu-22.04` for arch amd64 scheduled builds
@@ -25,58 +37,102 @@ jobs:
2537 matrix :
2638 arch : [amd64, arm64]
2739 timeout-minutes : ${{ (github.event_name != 'schedule' && 30) || ((matrix.arch == 'arm64' && 60) || 30) }}
40+ needs : timestamp
41+ env :
42+ ARCH : ${{matrix.arch}}
43+ TIMESTAMP : ${{ needs.timestamp.outputs.timestamp }}
2844 steps :
2945 - uses : actions/checkout@v3
3046 with :
3147 fetch-depth : 1
32- - name : Set arch helper output
33- id : arch-helper
34- run : |
35- echo "arch_postfix_dash=${{ (matrix.arch == 'arm64' && '-arm64') || '' }}" >> $GITHUB_OUTPUT
36- echo "arch_postfix_underscore=${{ (matrix.arch == 'arm64' && '_arm64') || '' }}" >> $GITHUB_OUTPUT
3748 - name : build slim image
3849 run : |
39- cd image && ruby auto_build.rb base_slim${{ steps.arch-helper.outputs.arch_postfix_underscore }}
50+ cd image && ruby auto_build.rb base_slim_$ARCH
4051 - name : tag slim images
41- id : tag-images
4252 run : |
43- TAG=`date +%Y%m%d-%H%M`
44- echo "tag=$(echo $TAG)" >> $GITHUB_OUTPUT
45- 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 }}
46- docker tag discourse/base:build_slim${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
53+ docker tag discourse/base:build_slim_$ARCH discourse/base:2.0.$TIMESTAMP-slim-$ARCH
54+ docker tag discourse/base:build_slim_$ARCH discourse/base:slim-$ARCH
4755 - name : build release image
4856 run : |
49- cd image && ruby auto_build.rb base${{ steps.arch-helper.outputs.arch_postfix_underscore }}
50- - name : tag amd64 release images
57+ cd image && ruby auto_build.rb base_$ARCH
58+ - name : tag release images
5159 run : |
52- TAG=${{ steps.tag-images.outputs.tag }}
53- docker tag discourse/base:build${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:2.0.$TAG${{ steps.arch-helper.outputs.arch_postfix_dash }}
54- docker tag discourse/base:build${{ steps.arch-helper.outputs.arch_postfix_underscore }} discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }}
60+ docker tag discourse/base:build_$ARCH discourse/base:2.0.$TIMESTAMP-$ARCH
61+ docker tag discourse/base:build_$ARCH discourse/base:release-$ARCH
5562 - name : build test_build image
5663 run : |
57- cd image && ruby auto_build.rb discourse_test_build${{ steps.arch-helper.outputs.arch_postfix_underscore }}
64+ cd image && ruby auto_build.rb discourse_test_build_$ARCH
5865 - name : run specs
5966 run : |
60- 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 }}
67+ docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build_$ARCH
68+ - name : build & tag dev image
69+ run : |
70+ cd image && ruby auto_build.rb discourse_dev_$ARCH
71+ docker tag discourse/discourse_dev:build_$ARCH discourse/discourse_dev:$TIMESTAMP-$ARCH
6172 - name : Print summary
6273 run : |
6374 docker images discourse/base
6475 - name : push to dockerhub
65- if : success() && ( github.ref == 'refs/heads/main')
76+ if : github.ref == 'refs/heads/main'
6677 env :
6778 DOCKERHUB_PASSWORD : ${{ secrets.DOCKERHUB_PASSWORD }}
6879 run : |
69- TAG=${{ steps.tag-images.outputs.tag }}
7080 docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
71- docker push discourse/base:2.0.$TAG-slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
72- docker push discourse/base:slim${{ steps.arch-helper.outputs.arch_postfix_dash }}
73- docker push discourse/base:2.0.$TAG${{ steps.arch-helper.outputs.arch_postfix_dash }}
74- docker push discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }}
81+ docker push discourse/base:2.0.$TIMESTAMP-slim-$ARCH
82+ docker push discourse/base:2.0.$TIMESTAMP-$ARCH
83+ docker push discourse/discourse_dev:$TIMESTAMP-$ARCH
7584 - name : Push discourse/base:aarch64 image for backwards compatibility
76- if : success() && (github.ref == 'refs/heads/main') && (matrix.arch == 'arm64')
85+ if : (github.ref == 'refs/heads/main') && (matrix.arch == 'arm64')
7786 run : |
78- docker tag discourse/base:release${{ steps.arch-helper.outputs.arch_postfix_dash }} discourse/base:aarch64
87+ docker tag discourse/base:2.0.$TIMESTAMP-$ARCH discourse/base:aarch64
7988 docker push discourse/base:aarch64
89+ push_multiarch_manifests :
90+ runs-on : ubuntu-latest
91+ needs : [base, timestamp]
92+ env :
93+ TIMESTAMP : ${{ needs.timestamp.outputs.timestamp }}
94+ if : github.ref == 'refs/heads/main'
95+ steps :
96+ - name : create and push multiarch manifests
97+ run : |
98+ docker login --username discoursebuild --password ${{ secrets.DOCKERHUB_PASSWORD }}
99+
100+ # Slim timestamped
101+ docker manifest create discourse/base:2.0.$TIMESTAMP-slim \
102+ -a discourse/base:2.0.$TIMESTAMP-slim-amd64 \
103+ -a discourse/base:2.0.$TIMESTAMP-slim-arm64
104+
105+ # Slim release
106+ docker manifest create discourse/base:release-slim \
107+ -a discourse/base:2.0.$TIMESTAMP-slim-amd64 \
108+ -a discourse/base:2.0.$TIMESTAMP-slim-arm64
109+
110+ # Full timestamped
111+ docker manifest create discourse/base:2.0.$TIMESTAMP \
112+ -a discourse/base:2.0.$TIMESTAMP-amd64 \
113+ -a discourse/base:2.0.$TIMESTAMP-arm64
114+
115+ # Full release
116+ docker manifest create discourse/base:release \
117+ -a discourse/base:2.0.$TIMESTAMP-amd64 \
118+ -a discourse/base:2.0.$TIMESTAMP-arm64
119+
120+ # Dev timestamped
121+ docker manifest create discourse/discourse_dev:$TIMESTAMP \
122+ -a discourse/discourse_dev:$TIMESTAMP-amd64 \
123+ -a discourse/discourse_dev:$TIMESTAMP-arm64
124+
125+ # Dev release
126+ docker manifest create discourse/discourse_dev:release \
127+ -a discourse/discourse_dev:$TIMESTAMP-amd64 \
128+ -a discourse/discourse_dev:$TIMESTAMP-arm64
129+
130+ docker manifest push discourse/base:2.0.$TIMESTAMP-slim
131+ docker manifest push discourse/base:release-slim
132+ docker manifest push discourse/base:2.0.$TIMESTAMP
133+ docker manifest push discourse/base:release
134+ docker manifest push discourse/discourse_dev:$TIMESTAMP
135+ docker manifest push discourse/discourse_dev:release
80136 test :
81137 runs-on : ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
82138 timeout-minutes : 30
@@ -118,22 +174,3 @@ jobs:
118174 docker push discourse/discourse_test:slim
119175 docker push discourse/discourse_test:slim-browsers
120176 docker push discourse/discourse_test:release
121- dev :
122- runs-on : ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || '' }}
123- timeout-minutes : 30
124- needs : base
125- steps :
126- - uses : actions/checkout@v3
127- with :
128- fetch-depth : 1
129- - name : build discourse_dev image
130- run : |
131- cd image && ruby auto_build.rb discourse_dev
132- - name : push to dockerhub
133- if : success() && (github.ref == 'refs/heads/main')
134- env :
135- DOCKERHUB_PASSWORD : ${{ secrets.DOCKERHUB_PASSWORD }}
136- run : |
137- docker tag discourse/discourse_dev:build discourse/discourse_dev:release
138- docker login --username discoursebuild --password $DOCKERHUB_PASSWORD
139- docker push discourse/discourse_dev:release
0 commit comments