name: Dynamic Build and Deploy Hardened Images on: push: branches: - main schedule: - cron: '0 0 * * 5' workflow_dispatch: jobs: build-and-push: strategy: matrix: runner: [linux-amd64, linux-arm64] runs-on: ${{ matrix.runner }} steps: - name: Install Node.js run: | if command -v apt-get &> /dev/null; then sudo apt-get update && sudo apt-get install -y nodejs elif command -v yum &> /dev/null; then sudo yum install -y nodejs elif command -v apk &> /dev/null; then apk add nodejs else echo "Package manager not found. Please pre-install Node.js on the runner host." exit 1 fi - name: Prepare Git for SHA256 Repo run: git config --global init.defaultObjectFormat sha256 - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to DHI Registry uses: docker/login-action@v3 with: registry: dhi.io username: ${{ secrets.DHI_USERNAME }} password: ${{ secrets.DHI_PASSWORD }} - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: git.chillcog.com username: ${{ git.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Detect and Build Images run: | FILES_TO_BUILD="" REGISTRY_HOST="git.chillcog.com" # OWNER_LOWER=$(echo "${{ git.repository_owner }}" | tr '[:upper:]' '[:lower:]') if [ "${{ github.event_name }}" = "schedule" ] || [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "Scheduled or manual run triggered. Processing all YAML files..." FILES_TO_BUILD=$(find . -maxdepth 1 -name "*.yml" -o -name "*.yaml") else echo "Push triggered. Detecting changed files..." FILES_TO_BUILD=$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }} 2>/dev/null | grep -E '\.(yml|yaml)$' || true) fi for file in $FILES_TO_BUILD; do file=$(echo "$file" | sed 's|^\./||') if [ ! -f "$file" ]; then continue; fi if [[ "$file" == .gitea/* ]]; then continue; fi filename=$(basename -- "$file") image_name=$(echo "${filename%.*}" | tr '[:upper:]' '[:lower:]') echo "---------------------------------------------------" echo "Processing: $file -> Target: ${REGISTRY_HOST}/${OWNER_LOWER}/${image_name}:latest" echo "---------------------------------------------------" docker buildx build \ --platform linux/amd64,linux/arm64 \ --push \ --no-cache \ -f "$file" \ -t "${REGISTRY_HOST}/${OWNER_LOWER}/${image_name}:latest" \ . done