Merge branch 'ci-cd-changes' of https://github.com/Amateur-God/Hassio… #18
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
--- | |
name: Add-on CI/CD | |
on: | |
push: | |
tags: | |
- '*' | |
branches: | |
- "*" | |
pull_request: | |
branches: | |
- "main" | |
jobs: | |
discover: | |
name: Discover Add-ons | |
runs-on: ubuntu-latest | |
outputs: | |
addon_dirs: ${{ steps.folders.outputs.addon_dirs }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Find add-on directories | |
id: folders | |
run: | | |
ADDON_DIRS=$(find addons -mindepth 1 -maxdepth 1 -type d | jq -R -s -c 'split("\n") | map(select(length > 0))') | |
echo "Found add-on directories: $ADDON_DIRS" | |
echo "addon_dirs=$ADDON_DIRS" >> $GITHUB_OUTPUT | |
- name: Debug - List directories | |
run: | | |
echo "Found add-on directories: ${{ steps.folders.outputs.addon_dirs }}" | |
information: | |
name: Gather add-on information | |
needs: discover | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.discover.outputs.addon_dirs) }} | |
outputs: | |
addon_dirs: ${{ needs.discover.outputs.addon_dirs }} | |
architectures: ${{ steps.information.outputs.architectures }} | |
build: ${{ steps.information.outputs.build }} | |
description: ${{ steps.information.outputs.description }} | |
name: ${{ steps.information.outputs.name }} | |
slug: ${{ steps.information.outputs.slug }} | |
target: ${{ steps.information.outputs.target }} | |
version: ${{ steps.read_version.outputs.version }} | |
version_changed: ${{ steps.check_version.outputs.version_changed }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Ensure all tags are fetched | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run add-on information action | |
id: information | |
uses: frenck/action-addon-information@v1 | |
with: | |
path: "./${{ matrix.folder }}" | |
- name: Read version from version.txt | |
id: read_version | |
run: | | |
VERSION=$(cat ./${{ matrix.folder }}/version.txt) | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
- name: Read previous version from previous_version.txt | |
id: read_previous_version | |
run: | | |
if [ -f ./${{ matrix.folder }}/previous_version.txt ]; then | |
PREVIOUS_VERSION=$(cat ./${{ matrix.folder }}/previous_version.txt) | |
else | |
PREVIOUS_VERSION="" | |
fi | |
echo "previous_version=$PREVIOUS_VERSION" >> $GITHUB_OUTPUT | |
- name: Check if version has changed | |
id: check_version | |
run: | | |
if [ "${{ steps.read_version.outputs.version }}" = "${{ steps.read_previous_version.outputs.previous_version }}" ]; then | |
echo "version_changed=false" >> $GITHUB_OUTPUT | |
else | |
echo "version_changed=true" >> $GITHUB_OUTPUT | |
fi | |
- name: Ensure version is 'dev-versionnumber' for branches | |
if: github.ref != 'refs/heads/main' | |
run: | | |
VERSION=$(cat ./${{ matrix.folder }}/version.txt) | |
jq --arg version "dev-$VERSION" '.version = $version' ./${{ matrix.folder }}/config.json > tmp.json && mv tmp.json ./${{ matrix.folder }}/config.json | |
- name: Ensure version is correct for main | |
if: github.ref == 'refs/heads/main' | |
run: | | |
VERSION=$(cat ./${{ matrix.folder }}/version.txt) | |
jq --arg version "$VERSION" '.version = $version' ./${{ matrix.folder }}/config.json > tmp.json && mv tmp.json ./${{ matrix.folder }}/config.json | |
- name: Update build.json | |
run: | | |
VERSION=$(cat ./${{ matrix.folder }}/version.txt) | |
jq --arg version "$VERSION" '.args.BUILD_VERSION = $version' ./${{ matrix.folder }}/build.json > tmp.json && mv tmp.json ./${{ matrix.folder }}/build.json | |
- name: Update previous_version.txt if version has changed | |
if: steps.check_version.outputs.version_changed == 'true' | |
run: | | |
echo "${{ steps.read_version.outputs.version }}" > ./${{ matrix.folder }}/previous_version.txt | |
- name: Commit and push changes | |
if: steps.check_version.outputs.version_changed == 'true' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "github-actions@github.com" | |
git add ./${{ matrix.folder }}/config.json ./${{ matrix.folder }}/build.json ./${{ matrix.folder }}/previous_version.txt | |
git commit -m "Update version and previous_version.txt" | |
git pull origin ${{ github.ref }} | |
git push https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git HEAD:${{ github.ref }} | |
- name: Debug - List extracted information | |
run: | | |
echo "Architectures: ${{ steps.information.outputs.architectures }}" | |
echo "Build: ${{ steps.information.outputs.build }}" | |
echo "Description: ${{ steps.information.outputs.description }}" | |
echo "Name: ${{ steps.information.outputs.name }}" | |
echo "Slug: ${{ steps.information.outputs.slug }}" | |
echo "Target: ${{ steps.information.outputs.target }}" | |
echo "Version: ${{ steps.read_version.outputs.version }}" | |
echo "Previous Version: ${{ steps.read_previous_version.outputs.previous_version }}" | |
echo "Version changed: ${{ steps.check_version.outputs.version_changed }}" | |
lint-hadolint: | |
name: Hadolint | |
if: github.ref != 'refs/heads/main' && github.event_name == 'push' | |
needs: information | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs) }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run Hadolint | |
uses: brpaz/hadolint-action@v1.5.0 | |
with: | |
dockerfile: "./${{ matrix.folder }}/Dockerfile" | |
config: .hadolint.yaml | |
lint-json: | |
name: JSON Lint | |
if: github.ref != 'refs/heads/main' && github.event_name == 'push' | |
needs: information | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs) }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run JQ | |
run: | | |
shopt -s globstar | |
cat ./${{ matrix.folder }}/**/*.json | jq '.' | |
lint-shellcheck: | |
name: Shellcheck | |
if: github.ref != 'refs/heads/main' && github.event_name == 'push' | |
needs: information | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs) }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run Shellcheck | |
uses: ludeeus/action-shellcheck@2.0.0 | |
env: | |
SHELLCHECK_OPTS: -s bash | |
lint-yamllint: | |
name: YAMLLint | |
if: github.ref != 'refs/heads/main' && github.event_name == 'push' | |
needs: information | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs) }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run YAMLLint | |
uses: frenck/action-yamllint@v1.5 | |
with: | |
config: .yamllint | |
lint-prettier: | |
name: Prettier | |
if: github.ref != 'refs/heads/main' && github.event_name == 'push' | |
needs: information | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs) }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Debug - Print addon_dirs | |
run: | | |
echo "addon_dirs: ${{ needs.information.outputs.addon_dirs }}" | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Run Prettier | |
uses: creyD/prettier_action@v4.3 | |
with: | |
prettier_options: --write ./${{ matrix.folder }}/**/*.{json,js,md,yaml} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Commit and push changes | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "github-actions@github.com" | |
git add ./${{ matrix.folder }}/config.json ./${{ matrix.folder }}/build.json | |
if ! git diff-index --quiet HEAD; then | |
git commit -m "Prettified Code!" | |
git fetch origin | |
git rebase origin/${{ github.ref }} | |
if [ $? -ne 0 ]; then | |
echo "Rebase failed, attempting to resolve conflicts" | |
git rebase --abort | |
git pull origin ${{ github.ref }} | |
fi | |
git push https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git HEAD:${{ github.ref }} | |
else | |
echo "No changes to commit" | |
fi | |
build_main_or_pr: | |
name: Build ${{ matrix.architecture }} (Main or PR) | |
if: (github.event_name == 'push' && github.ref == 'refs/heads/main' && ${{ needs.information.outputs.version_changed }} == 'true') || (github.event_name == 'pull_request' && ${{ needs.information.outputs.version_changed }} == 'true') | |
needs: | |
information | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
architecture: ["aarch64", "amd64", "armhf", "armv7", "i386"] | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs || '["addons/example"]') }} | |
outputs: | |
version: ${{ steps.set_version.outputs.version }} | |
slug_lower: ${{ steps.convert.outputs.slug_lower }} | |
repository_owner_lower: ${{ steps.convert.outputs.repository_owner_lower }} | |
folder: ${{ matrix.folder }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v3 | |
- name: Set version for branches | |
id: set_version | |
run: | | |
VERSION=${{ needs.information.outputs.version }} | |
if [ "${{ github.ref }}" != "refs/heads/main" ]; then | |
VERSION="dev-${VERSION}" | |
fi | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Set up build cache | |
id: cache | |
uses: actions/cache@v4.0.2 | |
with: | |
path: /tmp/.docker-cache | |
key: docker-${{ matrix.architecture }}-${{ github.sha }} | |
restore-keys: | | |
docker-${{ matrix.architecture }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3.0.0 | |
- name: Log in to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3.3.0 | |
- name: Compose build flags | |
id: flags | |
run: | | |
echo "date=$(date '+%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
from=$(yq eval '.build_from["${{ matrix.architecture }}"]' "${{ needs.information.outputs.build }}") | |
from=$(echo $from | tr -d '"') | |
echo "from=${from}" >> $GITHUB_OUTPUT | |
echo "BUILD_VERSION=${{ needs.information.outputs.version }}" >> $GITHUB_OUTPUT | |
if [[ "${{ matrix.architecture }}" == "amd64" ]]; then | |
echo "platform=linux/amd64" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "i386" ]]; then | |
echo "platform=linux/386" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "armhf" ]]; then | |
echo "platform=linux/arm/v6" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "armv7" ]]; then | |
echo "platform=linux/arm/v7" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "aarch64" ]]; then | |
echo "platform=linux/arm64/v8" >> $GITHUB_OUTPUT | |
else | |
echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}" | |
exit 1 | |
fi | |
- name: Debug - Print 'from' variable | |
run: | | |
echo "From variable: ${{ steps.flags.outputs.from }}" | |
- name: Download base image | |
if: steps.flags.outputs.from != 'null' | |
run: | | |
echo "Pulling base image: ${{ steps.flags.outputs.from }}" | |
docker pull ${{ steps.flags.outputs.from }} | |
- name: Convert to Lowercase | |
id: convert | |
run: | | |
SLUG_LOWER=$(echo ${{ needs.information.outputs.slug }} | tr '[:upper:]' '[:lower:]') | |
REPOSITORY_LOWER=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') | |
REPOSITORY_OWNER_LOWER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') | |
echo "slug_lower=$SLUG_LOWER" >> $GITHUB_OUTPUT | |
echo "repository_lower=$REPOSITORY_LOWER" >> $GITHUB_OUTPUT | |
echo "repository_owner_lower=$REPOSITORY_OWNER_LOWER" >> $GITHUB_OUTPUT | |
- name: Build and Push Docker image | |
uses: docker/build-push-action@v2 | |
with: | |
push: true | |
context: ./${{ matrix.folder }} | |
file: ./${{ matrix.folder }}/Dockerfile | |
platforms: ${{ steps.flags.outputs.platform }} | |
cache-from: type=local,src=/tmp/.docker-cache | |
cache-to: type=local,mode=max,dest=/tmp/.docker-cache-new | |
build-args: | | |
BUILD_ARCH=${{ matrix.architecture }} | |
BUILD_DATE=${{ steps.flags.outputs.date }} | |
BUILD_DESCRIPTION=${{ needs.information.outputs.description }} | |
BUILD_FROM=${{ steps.flags.outputs.from }} | |
BUILD_NAME=${{ needs.information.outputs.name }} | |
BUILD_REF=${{ github.sha }} | |
BUILD_REPOSITORY=${{ steps.convert.outputs.repository_lower }} | |
BUILD_VERSION=${{ needs.information.outputs.version }} | |
tags: | | |
${{ secrets.DOCKER_USERNAME }}/${{ steps.convert.outputs.slug_lower }}:${{ steps.set_version.outputs.version }}-${{ matrix.architecture }} | |
- name: Swap build cache | |
run: | | |
if [ -d /tmp/.docker-cache-new ]; then | |
rm -rf /tmp/.docker-cache | |
mv /tmp/.docker-cache-new /tmp/.docker-cache | |
else | |
echo "Cache directory /tmp/.docker-cache-new does not exist" | |
fi | |
build_other_branches: | |
name: Build ${{ matrix.architecture }} (Other Branches) | |
if: github.event_name == 'push' && github.ref != 'refs/heads/main' && ${{ needs.information.outputs.version_changed }} == 'true' | |
needs: | |
- information | |
- lint-hadolint | |
- lint-json | |
- lint-shellcheck | |
- lint-yamllint | |
- lint-prettier | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
architecture: ["aarch64", "amd64", "armhf", "armv7", "i386"] | |
folder: ${{ fromJson(needs.information.outputs.addon_dirs || '["addons/example"]') }} | |
outputs: | |
version: ${{ steps.set_version.outputs.version }} | |
slug_lower: ${{ steps.convert.outputs.slug_lower }} | |
repository_owner_lower: ${{ steps.convert.outputs.repository_owner_lower }} | |
folder: ${{ matrix.folder }} | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v3 | |
- name: Set version for branches | |
id: set_version | |
run: | | |
VERSION=${{ needs.information.outputs.version }} | |
if [ "${{ github.ref }}" != "refs/heads/main" ]; then | |
VERSION="dev-${VERSION}" | |
fi | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
- name: Debug - Print matrix folder path | |
run: | | |
echo "Matrix folder path: ${{ matrix.folder }}" | |
- name: Set up build cache | |
id: cache | |
uses: actions/cache@v4.0.2 | |
with: | |
path: /tmp/.docker-cache | |
key: docker-${{ matrix.architecture }}-${{ github.sha }} | |
restore-keys: | | |
docker-${{ matrix.architecture }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3.0.0 | |
- name: Log in to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3.3.0 | |
- name: Compose build flags | |
id: flags | |
run: | | |
echo "date=$(date '+%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT | |
from=$(yq eval '.build_from["${{ matrix.architecture }}"]' "${{ needs.information.outputs.build }}") | |
from=$(echo $from | tr -d '"') | |
echo "from=${from}" >> $GITHUB_OUTPUT | |
echo "BUILD_VERSION=${{ needs.information.outputs.version }}" >> $GITHUB_OUTPUT | |
if [[ "${{ matrix.architecture }}" == "amd64" ]]; then | |
echo "platform=linux/amd64" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "i386" ]]; then | |
echo "platform=linux/386" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "armhf" ]]; then | |
echo "platform=linux/arm/v6" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "armv7" ]]; then | |
echo "platform=linux/arm/v7" >> $GITHUB_OUTPUT | |
elif [[ "${{ matrix.architecture }}" == "aarch64" ]]; then | |
echo "platform=linux/arm64/v8" >> $GITHUB_OUTPUT | |
else | |
echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}" | |
exit 1 | |
fi | |
- name: Debug - Print 'from' variable | |
run: | | |
echo "From variable: ${{ steps.flags.outputs.from }}" | |
- name: Download base image | |
if: steps.flags.outputs.from != 'null' | |
run: | | |
echo "Pulling base image: ${{ steps.flags.outputs.from }}" | |
docker pull ${{ steps.flags.outputs.from }} | |
- name: Convert to Lowercase | |
id: convert | |
run: | | |
SLUG_LOWER=$(echo ${{ needs.information.outputs.slug }} | tr '[:upper:]' '[:lower:]') | |
REPOSITORY_LOWER=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]') | |
REPOSITORY_OWNER_LOWER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') | |
echo "slug_lower=$SLUG_LOWER" >> $GITHUB_OUTPUT | |
echo "repository_lower=$REPOSITORY_LOWER" >> $GITHUB_OUTPUT | |
echo "repository_owner_lower=$REPOSITORY_OWNER_LOWER" >> $GITHUB_OUTPUT | |
- name: Build and Push Docker image | |
uses: docker/build-push-action@v2 | |
with: | |
push: true | |
context: ./${{ matrix.folder }} | |
file: ./${{ matrix.folder }}/Dockerfile | |
platforms: ${{ steps.flags.outputs.platform }} | |
cache-from: type=local,src=/tmp/.docker-cache | |
cache-to: type=local,mode=max,dest=/tmp/.docker-cache-new | |
build-args: | | |
BUILD_ARCH=${{ matrix.architecture }} | |
BUILD_DATE=${{ steps.flags.outputs.date }} | |
BUILD_DESCRIPTION=${{ needs.information.outputs.description }} | |
BUILD_FROM=${{ steps.flags.outputs.from }} | |
BUILD_NAME=${{ needs.information.outputs.name }} | |
BUILD_REF=${{ github.sha }} | |
BUILD_REPOSITORY=${{ steps.convert.outputs.repository_lower }} | |
BUILD_VERSION=${{ needs.information.outputs.version }} | |
tags: | | |
${{ secrets.DOCKER_USERNAME }}/${{ steps.convert.outputs.slug_lower }}:${{ steps.set_version.outputs.version }}-${{ matrix.architecture }} | |
- name: Swap build cache | |
run: | | |
if [ -d /tmp/.docker-cache-new ]; then | |
rm -rf /tmp/.docker-cache | |
mv /tmp/.docker-cache-new /tmp/.docker-cache | |
else | |
echo "Cache directory /tmp/.docker-cache-new does not exist" | |
fi | |
create_and_push_manifest_latest: | |
name: Create and Push Docker Manifest | |
runs-on: ubuntu-latest | |
needs: build_main_or_pr | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Log in to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Create and Push Docker Manifest latest | |
run: | | |
IMAGE_NAME="${{ secrets.DOCKER_USERNAME }}/${{ needs.build_main_or_pr.outputs.slug_lower }}" | |
VERSION="${{ needs.build_main_or_pr.outputs.version }}" | |
docker buildx imagetools create \ | |
-t $IMAGE_NAME:latest \ | |
$IMAGE_NAME:$VERSION-amd64 \ | |
$IMAGE_NAME:$VERSION-aarch64 \ | |
$IMAGE_NAME:$VERSION-armhf \ | |
$IMAGE_NAME:$VERSION-i386 \ | |
$IMAGE_NAME:$VERSION-armv7 | |
- name: Create and Push Docker Manifest Version | |
run: | | |
IMAGE_NAME="${{ secrets.DOCKER_USERNAME }}/${{ needs.build_main_or_pr.outputs.slug_lower }}" | |
VERSION="${{ needs.build_main_or_pr.outputs.version }}" | |
docker buildx imagetools create \ | |
-t $IMAGE_NAME:$VERSION \ | |
$IMAGE_NAME:$VERSION-amd64 \ | |
$IMAGE_NAME:$VERSION-aarch64 \ | |
$IMAGE_NAME:$VERSION-armhf \ | |
$IMAGE_NAME:$VERSION-i386 \ | |
$IMAGE_NAME:$VERSION-armv7 | |
create_and_push_manifest_dev: | |
name: Create and Push Docker Manifest | |
runs-on: ubuntu-latest | |
needs: build_other_branches | |
steps: | |
- name: Check out code from GitHub | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Log in to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Create and Push Docker Manifest dev | |
run: | | |
IMAGE_NAME="${{ secrets.DOCKER_USERNAME }}/${{ needs.build_other_branches.outputs.slug_lower }}" | |
VERSION="${{ needs.build_other_branches.outputs.version }}" | |
docker buildx imagetools create \ | |
-t $IMAGE_NAME:DEV \ | |
$IMAGE_NAME:$VERSION-amd64 \ | |
$IMAGE_NAME:$VERSION-aarch64 \ | |
$IMAGE_NAME:$VERSION-armhf \ | |
$IMAGE_NAME:$VERSION-i386 \ | |
$IMAGE_NAME:$VERSION-armv7 | |
- name: Create and Push Docker Manifest version | |
run: | | |
IMAGE_NAME="${{ secrets.DOCKER_USERNAME }}/${{ needs.build_other_branches.outputs.slug_lower }}" | |
VERSION="${{ needs.build_other_branches.outputs.version }}" | |
docker buildx imagetools create \ | |
-t $IMAGE_NAME:$VERSION \ | |
$IMAGE_NAME:$VERSION-amd64 \ | |
$IMAGE_NAME:$VERSION-aarch64 \ | |
$IMAGE_NAME:$VERSION-armhf \ | |
$IMAGE_NAME:$VERSION-i386 \ | |
$IMAGE_NAME:$VERSION-armv7 | |
update_config_main_or_pr: | |
runs-on: ubuntu-latest | |
needs: build_main_or_pr | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Set up jq | |
run: sudo apt-get install jq | |
- name: Update config.json with new image URL | |
run: | | |
IMAGE_URL="docker.io/${{ secrets.DOCKER_USERNAME }}/${{ needs.build_main_or_pr.outputs.slug_lower }}" | |
jq --arg image "$IMAGE_URL" '.image = $image' ./${{ needs.build_main_or_pr.outputs.folder }}/config.json > tmp.json && mv tmp.json ./${{ needs.build_main_or_pr.outputs.folder }}/config.json | |
- name: Update build.json with build date | |
run: | | |
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
jq --arg date "$BUILD_DATE" '.args.BUILD_DATE = $date' ./${{ needs.build_main_or_pr.outputs.folder }}/build.json > tmp.json && mv tmp.json ./${{ needs.build_main_or_pr.outputs.folder }}/build.json | |
- name: Commit and push updated config.json | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "github-actions@github.com" | |
git add ./${{ needs.build_main_or_pr.outputs.folder }}/config.json | |
git add ./${{ needs.build_main_or_pr.outputs.folder }}/build.json | |
if git diff-index --quiet HEAD; then | |
echo "No changes to commit" | |
else | |
git commit -m "Update config.json with new image URL and build.json with build date" | |
git pull --rebase origin ${{ github.ref }} | |
git push | |
fi | |
update_config_other_branches: | |
runs-on: ubuntu-latest | |
needs: build_other_branches | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
- name: Set up jq | |
run: sudo apt-get install jq | |
- name: Update config.json with new image URL | |
run: | | |
IMAGE_URL="docker.io/${{ secrets.DOCKER_USERNAME }}/${{ needs.build_other_branches.outputs.slug_lower }}" | |
jq --arg image "$IMAGE_URL" '.image = $image' ./${{ needs.build_other_branches.outputs.folder }}/config.json > tmp.json && mv tmp.json ./${{ needs.build_other_branches.outputs.folder }}/config.json | |
- name: Update build.json with build date | |
run: | | |
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") | |
jq --arg date "$BUILD_DATE" '.args.DEV_BUILD_DATE = $date' ./${{ needs.build_other_branches.outputs.folder }}/build.json > tmp.json && mv tmp.json ./${{ needs.build_other_branches.outputs.folder }}/build.json | |
- name: Commit and push updated config.json | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
git config --global user.name "github-actions" | |
git config --global user.email "github-actions@github.com" | |
git add ./${{ needs.build_other_branches.outputs.folder }}/config.json | |
git add ./${{ needs.build_other_branches.outputs.folder }}/build.json | |
if git diff-index --quiet HEAD; then | |
echo "No changes to commit" | |
else | |
git commit -m "Update config.json with new image URL and build.json with build date" | |
git pull --rebase origin ${{ github.ref }} | |
git push | |
fi |