Arcaflow Container Toolkit is a tool used to automatically test, build, and publish Arcaflow plugins to Quay.
• Requirements
• Configuration
• Build Arcaflow Container Toolkit as an Executable Locally
• Arcaflow Container Toolkit as a Package
• Arcaflow Container Toolkit and Reusable Workflows
• Arcaflow Container Toolkit as an Action
- golang v1.18
- docker
- python 3 and pip
- flake8
Each plugin directory must meet the Arcaflow Plugins Requirements.
Configuring Arcaflow Container Toolkit can be configured using the act.yaml configuration file, or by using environment variables. More details are below.
example .act.yaml
revision: 20220824
image_name: "<IMAGE_NAME>"
image_tag: "<IMAGE_TAG>"
quay_exp: 'never'
archetype: ''
req_check_only: false
project_filepath: "<path/to/plugin/project/>"
registries:
- url: quay.io
username_envvar: "<QUAY_USERNAME>"
password_envvar: "<QUAY_PASSWORD>"
namespace_envvar: "<QUAY_NAMESPACE>"IMAGE_NAME Name of the image that Arcaflow Container Toolkit will build - string
IMAGE_TAG Tag of the image that Arcaflow Container Toolkit will build - string
QUAY_USERNAME Quay Username to be used for credentials - Default: ""
QUAY_PASSWORD Quay Password to be used for credentials - Default: ""
QUAY_NAMESPACE Quay Namespace to push image - Default: ""
QUAY_CUSTOM_NAMESPACE Quay Namespace to push image that is not QUAY_NAMESPACE - Default: ""
QUAY_IMG_EXP Image label to automatically expire in Quay - Default: "never"
BUILD_TIMEOUT Length of time before a build will fail in seconds - Default: 600
ARCHETYPE Request architecture (platform) of image to build with - Default: ""
REQ_CHECK_ONLY Disables build and push but still checks requirements - Default: False
QUAY_IMG_EXPmore documentation and time formats can be found hereQUAY_CUSTOM_NAMESPACEif set, will use in place ofQUAY_NAMESPACE. More info Arcaflow Container Toolkit and Reusable Workflows
Arcaflow Container Toolkit can be ran locally by building an executable from the project's root directory.
Configure the act.yaml and or set environment variables for build options.
go build act.go./act build --build./act build --build --pushPull the latest image
docker pull ghcr.io/arcalot/arcaflow-container-toolkit:latestRun the Arcaflow Container Toolkit image with enviornment variables
docker run \
--rm \
-e=IMAGE_TAG="0.0.1"\
-e=BUILD_TIMEOUT=600\
-e=QUAY_USERNAME=$QUAY_USERNAME\
-e=QUAY_PASSWORD=$QUAY_PASSWORD\
-e=QUAY_NAMESPACE=$QUAY_NAMESPACE\
--volume /var/run/docker.sock:/var/run/docker.sock:z \
--volume $PWD/../arcaflow-plugin-template-python:/github/workspace \
ghcr.io/arcalot/arcaflow-container-toolkit:latest build --build --pushArcaflow Container Toolkit can be utilized using the official reusable workflow arcalot/arcaflow-containter-toolkit/.github/workflows/reusable_workflow.yaml.
name: Arcaflow Container Toolkit
on:
push:
branches:
- "**"
release:
types:
- published
jobs:
arcaflow-container-toolkit:
uses: arcalot/arcaflow-container-toolkit/.github/workflows/reusable_workflow.yaml@main
with:
image_name: ${{ github.event.repository.name }}
image_tag: 'latest'
archetype: 'arm64' # Optional input for demonstration purposes
multi_arch: True # Optional input for demonstration purposes
secrets:
QUAY_NAMESPACE: ${{ secrets.QUAY_NAMESPACE }}
QUAY_USERNAME: ${{ secrets.QUAY_USERNAME }}
QUAY_PASSWORD: ${{ secrets.QUAY_PASSWORD }}
- This workflow will automatically configure
IMAGE_TAGto version if a release is detected. - This workflow will automatically configure
IMAGE_TAGto the formatbranch_commit-hash[0:7]if a development branch is detected. - This workflow will automatically configure
QUAY_IMG_EXPto 90 days if a development branch is detected. - Setting the
archetypeinput will configure theARCHETYPEenv variable. - Setting the
multi_archinput will configure theREQ_CHECK_ONLYenv variable to True, thus allowing docker buildx to handle the build and push functionality in the workflow for multi-arch builds of type linux/amd64,linux/arm64.
Arcaflow Container Toolkit can be utilized as an action in a workflow.
- name: arcaflow-container-toolkit-action
uses: arcalot/arcaflow-container-toolkit-action@v0.1.0
with:
image_name: ${{ github.event.repository.name }}
image_tag: 'latest'
quay_username: ${{ secrets.QUAY_USERNAME }}
quay_password: ${{ secrets.QUAY_PASSWORD }}
quay_namespace: ${{ secrets.QUAY_NAMESPACE }}
quay_custom_namespace: 'example' # This is optional, for reference
