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: | |
workflow_call: | |
workflow_dispatch: | |
jobs: | |
release_checks: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Extract branch metadata | |
shell: bash | |
run: | | |
BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} | |
echo "branch=${BRANCH}" >> $GITHUB_OUTPUT | |
echo "risk=${BRANCH##*\/}" >> $GITHUB_OUTPUT | |
echo "track=${BRANCH%*\/*}" >> $GITHUB_OUTPUT | |
id: branch_metadata | |
- name: Extract ROCK metadata | |
shell: bash | |
run: | | |
VERSION=$(yq '(.version|split("-"))[0]' rockcraft.yaml) | |
BASE=$(yq '(.base|split(":"))[1]' rockcraft.yaml) | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
echo "base=${BASE}" >> $GITHUB_OUTPUT | |
id: rock_metadata | |
- name: Check consistency between metadata and release branch | |
run: | | |
MAJOR_MINOR_VERSION=$(echo ${{ steps.rock_metadata.outputs.version }} | sed -n "s/\(^[0-9]*\.[0-9]*\).*/\1/p") | |
BASE=${{ steps.rock_metadata.outputs.base }} | |
if [ "${MAJOR_MINOR_VERSION}-${BASE}" != "${{ steps.branch_metadata.outputs.track }}" ]; then exit 1; fi | |
continue-on-error: false | |
outputs: | |
branch: ${{ steps.branch_metadata.outputs.branch }} | |
track: ${{ steps.branch_metadata.outputs.track }} | |
risk: ${{ steps.branch_metadata.outputs.risk }} | |
base: ${{ steps.rock_metadata.outputs.base }} | |
version: ${{ steps.rock_metadata.outputs.version }} | |
tests: | |
uses: ./.github/workflows/integration.yaml | |
publish: | |
needs: [tests, release_checks] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: | | |
sudo snap install docker | |
sudo addgroup --system docker; sudo adduser $USER docker | |
newgrp docker | |
sudo snap disable docker; sudo snap enable docker | |
sudo snap install yq | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ secrets.GHCR_USER }} | |
password: ${{ secrets.GHCR_TOKEN }} | |
- name: Get Artifact Name | |
id: artifact | |
run: | | |
ARTIFACT=$(make help | grep 'Artifact: ') | |
echo "name=${ARTIFACT#'Artifact: '}" >> $GITHUB_OUTPUT | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: charmed-spark | |
path: charmed-spark | |
- name: Publish Image to Channel | |
run: | | |
# Unpack artifact | |
mv charmed-spark/${{ steps.artifact.outputs.name }} . | |
rmdir charmed-spark | |
REPOSITORY="ghcr.io/canonical/" | |
RISK=${{ needs.release_checks.outputs.risk }} | |
TRACK=${{ needs.release_checks.outputs.track }} | |
if [ ! -z "$RISK" ] && [ "${RISK}" != "no-risk" ]; then TAG=${TRACK}_${RISK}; else TAG=${TRACK}; fi | |
# Import artifact into docker with new tag | |
sudo make import TARGET=docker REPOSITORY=${REPOSITORY} TAG=${TAG}\ | |
-o ${{ steps.artifact.outputs.name }} | |
IMAGE_NAME="${REPOSITORY}charmed-spark" | |
echo "Publishing ${IMAGE_NAME}:${TAG}" | |
docker push ${IMAGE_NAME}:${TAG} | |
if [[ "$RISK" == "edge" ]]; then | |
TAG="${{ needs.release_checks.outputs.version }}-${{ needs.release_checks.outputs.base }}_edge" | |
sudo make import TARGET=docker REPOSITORY=${REPOSITORY} TAG=${TAG}\ | |
-o ${{ steps.artifact.outputs.name }} | |
echo "Publishing ${IMAGE_NAME}:${TAG}" | |
docker push ${IMAGE_NAME}:${TAG} | |
fi |