This directory contains GitHub Actions workflows for building and deploying applications.
Files like dashy.yaml, homepage.yaml, cyberchef.yaml, and toolchain.yaml are minimal wrapper workflows that trigger on changes to specific application directories.
Structure:
name: <app-name>
on:
workflow_dispatch:
push:
branches:
- main
paths:
- applicationset/<app-name>/**
jobs:
docker-build:
uses: ./.github/workflows/reusable-docker-build.yaml
with:
path: applicationset/<app-name>A reusable workflow that handles Docker image building and pushing. Used by all application workflows.
Inputs:
tag-name: Docker image tag name (default: 'docker-build')path: Path to the application directory (required)push: Whether to push the image to registry (default: false)version: Image version tag (default: 'latest')
Triggered by Git tags following the pattern <app-name>-<version>. This workflow:
- Parses the application name and version from the tag
- Builds and pushes the Docker image
- Updates the version in the application's
kustomization.yaml - Commits the version update back to the repository
To add a workflow for a new application:
- Copy an existing workflow (e.g.,
cyberchef.yaml) - Update the name to match your application
- Update the paths to trigger on your application directory
- Customize the path parameter in the workflow call
Example for a new app called "myapp":
name: myapp
on:
workflow_dispatch:
push:
branches:
- main
paths:
- applicationset/myapp/**
jobs:
docker-build:
uses: ./.github/workflows/reusable-docker-build.yaml
with:
path: applicationset/myappWhile these workflows appear duplicated, they serve distinct purposes:
- Isolated Triggers: Each workflow only runs when its specific application changes
- Clear Build Status: Individual workflow badges in README.md show per-application status
- Flexible Configuration: Each application can customize its workflow parameters if needed
- GitHub Actions Limitations: GitHub Actions doesn't support dynamic workflow generation
The common build logic is extracted into reusable-docker-build.yaml to avoid true code duplication.
- Push changes to
applicationset/<app-name>/ - The application's workflow triggers
- Docker image is built (but not pushed)
- ArgoCD syncs the changes from the repository
- Create a tag:
git tag <app-name>-v1.0.0 && git push --tags - The
release.yamlworkflow triggers - Docker image is built and pushed to GitHub Container Registry
kustomization.yamlis updated with the new version- ArgoCD syncs the changes and deploys the new version
- Keep individual workflows minimal (just trigger configuration)
- Put common logic in reusable workflows
- Use semantic versioning for release tags:
<app>-v<major>.<minor>.<patch> - Test kustomization locally before pushing:
kubectl kustomize applicationset/<app>