Skip to content

Deploy

Deploy #452

Workflow file for this run

---
name: Deploy
on:
workflow_dispatch:
inputs:
reason:
required: true
description: "Reason for running this workflow"
use_test_image:
required: false
type: boolean
description: "Use base image testpr"
default: false
build_latest_as_test:
required: false
type: boolean
description: "Build latest as test"
default: false
push:
branches:
- main
paths:
- "rust/**"
- "Dockerfile"
- "Dockerfile.build_binary"
- "rootfs/**"
jobs:
workflow-dispatch:
name: Triggered via Workflow Dispatch?
# only run this step if workflow dispatch triggered
# log the reason the workflow dispatch was triggered
if: |
github.event_name == 'workflow_dispatch' &&
github.event.inputs.reason != ''
runs-on: ubuntu-latest
steps:
- name: Log dispatch reason
env:
INPUTS_REASON: ${{ github.event.inputs.reason }}
INPUTS_USE_TEST_IMAGE: ${{ github.event.inputs.use_test_image }}
INPUTS_BUILD_LATEST_AS_TEST: ${{ github.event.inputs.build_latest_as_test }}
run: |
echo "Workflow dispatch reason: $INPUTS_REASON"
echo "Use test image: $INPUTS_USE_TEST_IMAGE"
echo "Build latest as test: $INPUTS_BUILD_LATEST_AS_TEST"
binary_build_armv7:
name: Build Binary - armv7
runs-on: ubuntu-latest
# needs: test_rust_functionality
steps:
- name: Checkout
uses: actions/checkout@v4.2.0
with:
fetch-depth: 0
- name: Run Docker on tmpfs
uses: JonasAlfredsson/docker-on-tmpfs@v1.0.1
with:
tmpfs_size: 5
swap_size: 4
swap_location: "/mnt/swapfile"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
- name: Build armv7
uses: docker/build-push-action@v6.8.0
with:
context: .
push: false
file: Dockerfile.build_binary
tags: acars_router:armv7
platforms: linux/arm/v7
outputs: type=local,dest=./image_armv7/
- name: Upload artifact armv7 binary
uses: actions/upload-artifact@v4.4.0
with:
name: acars_router.armv7
path: ./image_armv7/acars_router
binary_build_arm64:
name: Build Binary - arm64
runs-on: ubuntu-latest
# needs: test_rust_functionality
steps:
- name: Checkout
uses: actions/checkout@v4.2.0
with:
fetch-depth: 0
- name: Run Docker on tmpfs
uses: JonasAlfredsson/docker-on-tmpfs@v1.0.1
with:
tmpfs_size: 5
swap_size: 4
swap_location: "/mnt/swapfile"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
- name: Build arm64
uses: docker/build-push-action@v6.8.0
with:
context: .
push: false
file: Dockerfile.build_binary
tags: acars_router:arm64
platforms: linux/arm64
outputs: type=local,dest=./image_arm64/
- name: Upload artifact arm64 binary
uses: actions/upload-artifact@v4.4.0
with:
name: acars_router.arm64
path: ./image_arm64/acars_router
binary_build_amd64:
name: Build Binary - amd64
runs-on: ubuntu-latest
# needs: test_rust_functionality
steps:
- name: Checkout
uses: actions/checkout@v4.2.0
with:
fetch-depth: 0
- name: Run Docker on tmpfs
uses: JonasAlfredsson/docker-on-tmpfs@v1.0.1
with:
tmpfs_size: 5
swap_size: 4
swap_location: "/mnt/swapfile"
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3.6.1
- name: Build amd64
uses: docker/build-push-action@v6.8.0
with:
context: .
push: false
file: Dockerfile.build_binary
tags: acars_router:amd64
platforms: linux/amd64
outputs: type=local,dest=./image_amd64/
- name: Upload artifact amd64 binary
uses: actions/upload-artifact@v4.4.0
with:
name: acars_router.amd64
path: ./image_amd64/acars_router
consolidate_binaries:
name: Consolidate & Cache Binaries
runs-on: ubuntu-latest
needs: [binary_build_amd64, binary_build_arm64, binary_build_armv7]
steps:
- run: mkdir -p ./bin
- uses: actions/download-artifact@v4.1.8
with:
name: acars_router.amd64
path: ./bin/acars_router.amd64
- uses: actions/download-artifact@v4.1.8
with:
name: acars_router.armv7
path: ./bin/acars_router.armv7
- uses: actions/download-artifact@v4.1.8
with:
name: acars_router.arm64
path: ./bin/acars_router.arm64
- run: ls -la ./bin/*
- name: Cache Binaries
uses: actions/cache@v4.0.2
with:
path: ./bin/
key: ${{ github.run_id }}
release_binaries:
name: Release Binaries
if: |
(github.event.inputs.build_latest_as_test == 'false' ||
github.event.inputs.build_latest_as_test == '') &&
(github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '')
needs:
[
binary_build_amd64,
binary_build_arm64,
binary_build_armv7,
consolidate_binaries,
]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.2.0
with:
fetch-depth: 0
- name: Cache cargo build output
id: get_cache
uses: actions/cache@v4.0.2
with:
path: ./bin/
key: ${{ github.run_id }}
- name: Prepare binary release tarballs
run: |
ORIGDIR=$(pwd)
# Make release tarballs
mkdir -vp ./release
pushd ./bin
tar cJvf "$ORIGDIR/release/acars_router.amd64.tar.xz" ./acars_router.amd64
tar cJvf "$ORIGDIR/release/acars_router.armv7.tar.xz" ./acars_router.armv7
tar cJvf "$ORIGDIR/release/acars_router.arm64.tar.xz" ./acars_router.arm64
popd
- name: Get binary version from Cargo.toml
if: steps.get_cache.outputs.cache-hit == 'true'
id: release_version
run: |
# Get version from Cargo.toml
RELEASE_VERSION=$(cat ./Cargo.toml | grep '\[workspace.package\]' -A9999 | grep -m 1 'version = ' | tr -d " " | tr -d '"' | tr -d "'" | cut -d = -f 2)
echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_OUTPUT
- name: Create binary release
uses: ncipollo/release-action@v1.14.0
with:
body: "See Commits"
allowUpdates: true
commit: ${{ github.ref }}
name: ${{ steps.release_version.outputs.RELEASE_VERSION }} Build ${{ github.run_number }}
tag: ${{ steps.release_version.outputs.RELEASE_VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}
deploy:
name: Deploy
if: |
github.event.inputs.build_latest_as_test == 'false' ||
github.event.inputs.build_latest_as_test == ''
needs: [consolidate_binaries]
uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main
with:
push_enabled: true
push_destinations: ghcr.io
ghcr_repo_owner: ${{ github.repository_owner }}
ghcr_repo: ${{ github.repository }}
build_with_tmpfs: true
get_version_method: cargo_toml_file_in_repo:file=/Cargo.toml
cache_enabled: true
cache_path: ./bin/
cache_key: ${{ github.run_id }}
# set build_latest to true if github.event.inputs.use_test_image is false
build_latest: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }}
build_baseimage_test: ${{ github.event.inputs.use_test_image == 'true' }}
# only build the entire stack if we are not using the test image
build_version_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }}
build_platform_specific: ${{ github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '' }}
build_nohealthcheck: false
build_baseimage_url: :base/:base-test-pr
secrets:
ghcr_token: ${{ secrets.GITHUB_TOKEN }}
deploy_test:
name: Deploy as test
if: |
github.event.inputs.build_latest_as_test == 'true' &&
(github.event.inputs.use_test_image == 'false' || github.event.inputs.use_test_image == '')
needs: [consolidate_binaries]
uses: sdr-enthusiasts/common-github-workflows/.github/workflows/build_and_push_image.yml@main
with:
push_enabled: true
push_destinations: ghcr.io
ghcr_repo_owner: ${{ github.repository_owner }}
ghcr_repo: ${{ github.repository }}
build_with_tmpfs: true
get_version_method: cargo_toml_file_in_repo:file=/Cargo.toml
cache_enabled: true
cache_path: ./bin/
cache_key: ${{ github.run_id }}
# set build_latest to true if github.event.inputs.use_test_image is false
build_latest: true
docker_latest_tag: test
build_baseimage_test: false
# only build the entire stack if we are not using the test image
build_version_specific: false
build_platform_specific: false
build_nohealthcheck: false
build_baseimage_url: :base/:base-test-pr
secrets:
ghcr_token: ${{ secrets.GITHUB_TOKEN }}