Skip to content

Directly pass build SHAs to eliminate race conditions #275

Directly pass build SHAs to eliminate race conditions

Directly pass build SHAs to eliminate race conditions #275

Workflow file for this run

name: Publish images
on:
workflow_dispatch:
push:
branches:
- master
- main
- brent/fix_tag_race
paths-ignore:
- "*.md"
schedule:
- cron: '0 7 * * 2'
concurrency:
group: publish-ha-images-${{ github.ref }}
cancel-in-progress: true
env:
DOCKER_REPOSITORY: timescaledev/timescaledb-ha
DOCKER_REGISTRY: docker.io
jobs:
publish:
name: Publish pg${{ matrix.pg_major }}${{ matrix.all }}${{ matrix.oss }} ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ "amd64", "arm64" ]
pg_major: [ "16", "15", "14", "13", "12" ]
all_versions: [ "false", "true" ]
oss_only: [ "false", "true" ]
include:
- oss_only: "true"
oss: "-oss"
- all_versions: "true"
all: "-all"
- platform: amd64
runs_on: ubuntu-22.04
- platform: arm64
runs_on: cloud-image-runner-arm64
runs-on: "${{ matrix.runs_on }}"
steps:
# The github runners have a lot of space in /mnt, but apparently not enough in /. This step removes about 13G.
- name: remove unneeded runner software
run: |
df -h
du -chs /usr/share/dotnet /usr/local/lib/android /opt/microsoft || true
sudo rm -fr /usr/share/dotnet /usr/local/lib/android /opt/microsoft || true
sudo docker image prune --all --force || true
df -h
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.ORG_DOCKER_HUB_USERNAME }}
password: ${{ secrets.ORG_DOCKER_HUB_ACCESS_TOKEN }}
- name: Setup | Docker Context
run: if ! docker context use ha-builder; then docker context create ha-builder; fi
- name: Setup | Buildx
uses: docker/setup-buildx-action@v3
with:
endpoint: ha-builder
- name: Build and publish (pg${{ matrix.pg_major }}${{ matrix.all }}${{ matrix.oss }} ${{ matrix.platform }})
id: build
env:
PLATFORM: ${{ matrix.platform }}
PG_MAJOR: ${{ matrix.pg_major }}
ALL_VERSIONS: ${{ matrix.all_versions }}
OSS_ONLY: ${{ matrix.oss_only }}
run: |
GIT_REV="${GITHUB_REF#refs/tags/}" make publish-builder publish-release
- name: export outputs
run: |
mkdir -p /tmp/outputs
builder_id="${{ steps.build.outputs.builder_id }}"
release_id="${{ steps.build.outputs.release_id }}"
touch "/tmp/outputs/builder-$(echo "$builder_id" | cut -d: -f2)"
touch "/tmp/outputs/release-$(echo "$release_id" | cut -d: -f2)"
- name: upload outputs
uses: actions/upload-artifact@v4
with:
name: outputs-${{ matrix.pg_major }}-${{ matrix.all_versions }}-${{ matrix.oss_only }}-${{ matrix.platform }}
path: /tmp/outputs/*
if-no-files-found: error
retention-days: 1
publish-combined-manifests:
name: Publish manifest pg${{ matrix.pg_major }}${{ matrix.docker_tag_postfix }}
needs: [ "publish" ]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
pg_major: [ "16", "15", "14", "13", "12" ]
docker_tag_postfix: ["", "-all", "-oss", "-all-oss" ]
include:
- docker_tag_postfix: ""
oss_only: "false"
all_versions: "false"
- docker_tag_postfix: "-all"
oss_only: "false"
all_versions: "true"
- docker_tag_postfix: "-oss"
oss_only: "true"
all_versions: "false"
- docker_tag_postfix: "-all-oss"
oss_only: "true"
all_versions: "true"
steps:
- name: Download arm64 outputs
uses: actions/download-artifact@v4
with:
name: outputs-${{ matrix.pg_major }}-${{ matrix.all_versions }}-${{ matrix.oss_only }}-arm64
path: /tmp/outputs
pattern: '*'
merge-multiple: true
- name: Download amd64 outputs
uses: actions/download-artifact@v4
with:
name: outputs-${{ matrix.pg_major }}-${{ matrix.all_versions }}-${{ matrix.oss_only }}-amd64
path: /tmp/outputs
pattern: '*'
merge-multiple: true
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.ORG_DOCKER_HUB_USERNAME }}
password: ${{ secrets.ORG_DOCKER_HUB_ACCESS_TOKEN }}
# QEMU for multiplatform, which should be quick enough for pulling version information out of the images
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Publish combined manifest for pg${{ matrix.pg_major }}${{ matrix.docker_tag_postfix }}
env:
PG_MAJOR: ${{ matrix.pg_major }}
VERSION_TAG: pg${{ matrix.pg_major}}${{ matrix.docker_tag_postfix }}-builder
DOCKER_TAG_POSTFIX: ${{ matrix.docker_tag_postfix }}
run: make publish-manifests
check:
name: Check image pg${{ matrix.pg_major }}${{ matrix.docker_tag_postfix }}
needs: [ "publish", "publish-combined-manifests" ]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
pg_major: [ "16", "15", "14", "13", "12" ]
docker_tag_postfix: ["", "-all", "-oss", "-all-oss" ]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.ORG_DOCKER_HUB_USERNAME }}
password: ${{ secrets.ORG_DOCKER_HUB_ACCESS_TOKEN }}
# QEMU for multiplatform, which should be quick enough for just the checks
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Check pg${{ matrix.pg_major }}${{ matrix.docker_tag_postfix }}
env:
PG_MAJOR: ${{ matrix.pg_major }}
DOCKER_TAG_POSTFIX: ${{ matrix.docker_tag_postfix }}
run: make get-image-config check
dispatch-ha-image-published-event:
name: Dispatch HA image published event
needs: [ "check" ]
if: ${{ github.event_name == 'push' }}
runs-on: ubuntu-latest
steps:
- name: Dispatch event to Publish cloud images workflow
run: |
curl -H "Accept: application/vnd.github.everest-preview+json" \
-H "Authorization: token ${{ secrets.ORG_AUTOMATION_TOKEN }}" \
--request POST \
--data '{"event_type": "ha_image_published"}' \
https://api.github.com/repos/timescale/timescaledb-docker-cloud/dispatches