Deploy #455
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: 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 }} |