Skip to content

Release discourse/base images for discourse/discourse stable branch #2088

Release discourse/base images for discourse/discourse stable branch

Release discourse/base images for discourse/discourse stable branch #2088

Workflow file for this run

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