Add/snakemake flux #78
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: Container (Demo) Build Matrices | |
on: | |
# Enable for testing builds for a PR | |
pull_request: [] | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
generate: | |
name: Generate Build Matrix | |
runs-on: ubuntu-latest | |
outputs: | |
dockerbuild_matrix: ${{ steps.dockerbuild.outputs.dockerbuild_matrix }} | |
empty_matrix: ${{ steps.dockerbuild.outputs.dockerbuild_matrix_empty }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get changed files | |
id: changed-files | |
uses: tj-actions/changed-files@aa52cfcd81f1a00a6bf1241a8cad6adec4d80638 # v33 | |
with: | |
separator: " " | |
- name: Convert changed Dockerfile to uptodate | |
id: parsed_files | |
env: | |
changed_files: ${{ steps.changed-files.outputs.all_changed_files }} | |
run: /bin/bash .github/scripts/prepare_paths.sh | |
- name: Generate Build Matrix | |
uses: vsoch/uptodate@main | |
id: dockerbuild | |
with: | |
root: ${{ steps.parsed_files.outputs.parsed_files }} | |
parser: dockerbuild | |
flags: "--registry ghcr.io/rse-ops --all" | |
- name: View and Check Build Matrix Result | |
env: | |
result: ${{ steps.dockerbuild.outputs.dockerbuild_matrix }} | |
run: | | |
echo ${result} | |
if [[ "${result}" == "[]" ]]; then | |
printf "The matrix is empty, will not trigger next workflow.\n" | |
else | |
printf "The matrix is not empty, and we should continue on to the next workflow.\n" | |
fi | |
build: | |
needs: | |
- generate | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
result: ${{ fromJson(needs.generate.outputs.dockerbuild_matrix) }} | |
arch: [linux/amd64] | |
if: ${{ needs.generate.outputs.empty_matrix == 'false' }} | |
name: Build ${{ matrix.result.container_name }} ${{ matrix.arch[0] }} | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v3 | |
- name: GHCR Login | |
if: (github.event_name != 'pull_request') | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
# Uncomment if need more build space | |
# - name: Run Actions Cleaner | |
# uses: rse-ops/actions-cleaner/ubuntu@main | |
- name: Pull Docker Layers | |
env: | |
container: ${{ matrix.result.container_name }} | |
run: docker pull ghcr.io/rse-ops/${container} || exit 0 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Prepare ${{ matrix.result.container_name }} | |
id: builder | |
env: | |
container: ${{ matrix.result.container_name }} | |
prefix: ${{ matrix.result.command_prefix }} | |
filename: ${{ matrix.result.filename }} | |
run: | | |
basedir=$(dirname $filename) | |
container=$(python -c "print('${container}'.strip('-'))") | |
printf "Base directory is ${basedir}\n" | |
# Get relative path to PWD and generate dashed name from it | |
cd $basedir | |
echo "${prefix} -t ${container} ." | |
build_args="$(echo "${prefix#*--build-arg}")" | |
# Add build-arg for anaconda download | |
echo "dockerfile_dir=${basedir}" >> $GITHUB_ENV | |
echo "build_args=${build_args}" >> $GITHUB_ENV | |
echo "container=${container}" >> $GITHUB_ENV | |
echo "filename=${filename}" >> $GITHUB_ENV | |
- name: Build ${{ matrix.dockerfile[1] }} | |
uses: docker/build-push-action@v3 | |
with: | |
context: ${{ env.dockerfile_dir }} | |
file: ${{ env.filename }} | |
platforms: ${{ matrix.arch[0] }} | |
push: ${{ github.event_name != 'pull_request' }} | |
build-args: | | |
${{ env.build_args }} | |
tags: ${{ env.container }} |