Release discourse/base
images for discourse/discourse
stable branch
#2088
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "launcher_go/**" | |
- ".github/workflows/launcher_go.yml" | |
pull_request: | |
paths-ignore: | |
- "launcher_go/**" | |
- ".github/workflows/launcher_go.yml" | |
schedule: | |
- cron: "0 0 * * *" | |
concurrency: | |
group: build-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }} | |
cancel-in-progress: true | |
env: | |
BUILDKIT_PROGRESS: plain | |
DISCOURSE_TURBO_RSPEC_RETRY_AND_LOG_FLAKY_TESTS: true | |
jobs: | |
timestamp: | |
runs-on: ubuntu-latest | |
outputs: | |
timestamp: ${{ steps.timestamp.outputs.timestamp }} | |
steps: | |
- id: timestamp | |
run: | | |
timestamp=`date +%Y%m%d-%H%M` | |
echo "timestamp=$timestamp" | |
echo "timestamp=$timestamp" >> $GITHUB_OUTPUT | |
deps: | |
# `unbuntu-22.04-8core` for arch amd64 non-scheduled builds | |
# `unbuntu-22.04` for arch amd64 scheduled builds | |
# `unbuntu-22.04-8core-arm` for arch arm64 non-scheduled builds | |
# `unbuntu-22.04-2core-arm` for arch arm64 scheduled builds | |
runs-on: ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || (( matrix.arch == 'arm64' && '-2core' ) || '') }}${{ (matrix.arch == 'arm64') && '-arm' || '' }} | |
strategy: | |
matrix: | |
arch: [amd64, arm64] | |
timeout-minutes: ${{ (github.event_name == 'schedule' && 90) || ((matrix.arch == 'arm64' && 45) || 30) }} | |
needs: timestamp | |
env: | |
ARCH: ${{matrix.arch}} | |
TIMESTAMP: ${{ needs.timestamp.outputs.timestamp }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build slim image `--target discourse_dependencies` | |
run: | | |
cd image && ruby auto_build.rb base_slim_$ARCH | |
- name: Export image | |
uses: docker/build-push-action@v6 | |
with: | |
tags: discourse/base:build_deps_${{ env.ARCH }} | |
outputs: type=docker,dest=/tmp/build_deps_${{ env.ARCH }}.tar | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build_deps_${{ env.ARCH }} | |
path: /tmp/build_deps_${{ env.ARCH }}.tar | |
base: | |
# `unbuntu-22.04-8core` for arch amd64 non-scheduled builds | |
# `unbuntu-22.04` for arch amd64 scheduled builds | |
# `unbuntu-22.04-8core-arm` for arch arm64 non-scheduled builds | |
# `unbuntu-22.04-2core-arm` for arch arm64 scheduled builds | |
runs-on: ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || (( matrix.arch == 'arm64' && '-2core' ) || '') }}${{ (matrix.arch == 'arm64') && '-arm' || '' }} | |
strategy: | |
matrix: | |
arch: [amd64, arm64] | |
discourse_branch: [main, stable] | |
timeout-minutes: ${{ (github.event_name == 'schedule' && 90) || ((matrix.arch == 'arm64' && 45) || 30) }} | |
needs: [deps, timestamp] | |
env: | |
ARCH: ${{matrix.arch}} | |
DISCOURSE_BRANCH: ${{matrix.discourse_branch}} | |
TIMESTAMP: ${{ needs.timestamp.outputs.timestamp }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build_deps_${{ env.ARCH }} | |
path: /tmp/build_deps_${{ env.ARCH }}.tar | |
- name: Load image | |
run: | | |
docker load --input /tmp/build_deps_${{ env.ARCH }}.tar | |
docker images ls -a | |
- name: build slim image | |
run: | | |
cd image && ruby auto_build.rb base_slim_$BRANCH_$ARCH | |
- name: tag slim images | |
run: | | |
docker tag discourse/base:build_slim_$DISCOURSE_BRANCH_$ARCH discourse/base:2.0.$TIMESTAMP-slim-$DISCOURSE_BRANCH-$ARCH | |
docker tag discourse/base:build_slim_$DISCOURSE_BRANCH_$ARCH discourse/base:slim-$DISCOURSE_BRANCH-$ARCH | |
- name: build release image | |
run: | | |
cd image && ruby auto_build.rb base_$ARCH | |
- name: tag release images | |
run: | | |
docker tag discourse/base:build_$ARCH discourse/base:2.0.$TIMESTAMP-$DISCOURSE_BRANCH-$ARCH | |
docker tag discourse/base:build_$ARCH discourse/base:release-$DISCOURSE_BRANCH-$ARCH | |
- name: build test_build image | |
run: | | |
cd image && ruby auto_build.rb discourse_test_build_$DISCOURSE_BRANCH_$ARCH | |
- name: run specs | |
run: | | |
docker run --rm -e RUBY_ONLY=1 -e USE_TURBO=1 -e SKIP_PLUGINS=1 -e SKIP_LINT=1 discourse/discourse_test:build_$DISCOURSE_BRANCH_$ARCH | |
- name: build & tag dev image for main Discourse branch | |
if: matrix.discourse_branch == 'main' | |
run: | | |
cd image && ruby auto_build.rb discourse_dev_$ARCH | |
docker tag discourse/discourse_dev:build_$ARCH discourse/discourse_dev:$TIMESTAMP-$ARCH | |
- name: Print summary | |
run: | | |
docker images discourse/base | |
- name: push to dockerhub | |
if: github.ref == 'refs/heads/main' | |
env: | |
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} | |
run: | | |
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD | |
docker push discourse/base:2.0.$TIMESTAMP-slim-$DISCOURSE_BRANCH-$ARCH | |
docker push discourse/base:2.0.$TIMESTAMP-$DISCOURSE_BRANCH-$ARCH | |
docker push discourse/discourse_dev:$TIMESTAMP-$ARCH | |
- name: Push discourse/base:aarch64 image for backwards compatibility | |
if: (github.ref == 'refs/heads/main') && (matrix.arch == 'arm64') | |
run: | | |
docker tag discourse/base:2.0.$TIMESTAMP-$ARCH discourse/base:aarch64 | |
docker push discourse/base:aarch64 | |
push_multiarch_manifests: | |
runs-on: ubuntu-latest | |
needs: [base, timestamp] | |
env: | |
TIMESTAMP: ${{ needs.timestamp.outputs.timestamp }} | |
if: github.ref == 'refs/heads/main' | |
steps: | |
- name: create and push multiarch manifests | |
run: | | |
docker login --username discoursebuild --password ${{ secrets.DOCKERHUB_PASSWORD }} | |
# Slim Discourse main branch timestamped | |
docker manifest create discourse/base:2.0.$TIMESTAMP-slim \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-main-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-main-arm64 | |
# Slim Discourse stable branch timestamped | |
docker manifest create discourse/base:2.0.$TIMESTAMP-slim-stable \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-stable-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-stable-arm64 | |
# Slim Discourse main branch release | |
docker manifest create discourse/base:release-slim \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-main-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-main-arm64 | |
# Slim Discourse stable branch release | |
docker manifest create discourse/base:release-slim-stable \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-stable-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-slim-stable-arm64 | |
# Full Discourse main branch timestamped | |
docker manifest create discourse/base:2.0.$TIMESTAMP \ | |
-a discourse/base:2.0.$TIMESTAMP-main-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-main-arm64 | |
# Full Discourse stable branch timestamped | |
docker manifest create discourse/base:2.0.$TIMESTAMP-stable \ | |
-a discourse/base:2.0.$TIMESTAMP-stable-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-stable-arm64 | |
# Full Discourse main branch release | |
docker manifest create discourse/base:release \ | |
-a discourse/base:2.0.$TIMESTAMP-main-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-main-arm64 | |
# Full Discourse stable branch release | |
docker manifest create discourse/base:release-stable \ | |
-a discourse/base:2.0.$TIMESTAMP-stable-amd64 \ | |
-a discourse/base:2.0.$TIMESTAMP-stable-arm64 | |
# Dev timestamped | |
docker manifest create discourse/discourse_dev:$TIMESTAMP \ | |
-a discourse/discourse_dev:$TIMESTAMP-amd64 \ | |
-a discourse/discourse_dev:$TIMESTAMP-arm64 | |
# Dev release | |
docker manifest create discourse/discourse_dev:release \ | |
-a discourse/discourse_dev:$TIMESTAMP-amd64 \ | |
-a discourse/discourse_dev:$TIMESTAMP-arm64 | |
docker manifest push discourse/base:2.0.$TIMESTAMP-slim | |
docker manifest push discourse/base:2.0.$TIMESTAMP-slim-stable | |
docker manifest push discourse/base:release-slim | |
docker manifest push discourse/base:release-slim-stable | |
docker manifest push discourse/base:2.0.$TIMESTAMP | |
docker manifest push discourse/base:2.0.$TIMESTAMP-stable | |
docker manifest push discourse/base:release | |
docker manifest push discourse/base:release-stable | |
docker manifest push discourse/discourse_dev:$TIMESTAMP | |
docker manifest push discourse/discourse_dev:release | |
test: | |
runs-on: ubuntu-22.04${{ ((github.event_name != 'schedule') && '-8core') || '' }} | |
timeout-minutes: 30 | |
needs: base | |
defaults: | |
run: | |
working-directory: image/discourse_test | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: build discourse_test:slim | |
run: | | |
docker buildx build . --load \ | |
--build-arg from_tag=slim \ | |
--target base \ | |
--tag discourse/discourse_test:slim | |
- name: build discourse_test:slim-browsers | |
run: | | |
docker buildx build . --load \ | |
--build-arg from_tag=slim \ | |
--target with_browsers \ | |
--tag discourse/discourse_test:slim-browsers | |
- name: build discourse_test:release | |
run: | | |
docker buildx build . --load \ | |
--build-arg from_tag=release \ | |
--target release \ | |
--tag discourse/discourse_test:release | |
- name: Print summary | |
run: | | |
docker images discourse/discourse_test | |
- name: push to dockerhub | |
if: success() && (github.ref == 'refs/heads/main') | |
env: | |
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} | |
run: | | |
docker login --username discoursebuild --password $DOCKERHUB_PASSWORD | |
docker push discourse/discourse_test:slim | |
docker push discourse/discourse_test:slim-browsers | |
docker push discourse/discourse_test:release |