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 }} container: image: docker:latest steps: - name: Checkout Code run: | apk add --no-cache git git config --global init.defaultObjectFormat sha256 git clone https://${{ github.token }}@git.chillcog.com/${{ github.repository }}.git . git checkout ${{ github.sha }} - name: Log in to DHI Registry run: | echo "${{ secrets.DHI_PASSWORD }}" | docker login dhi.io -u "${{ secrets.DHI_USERNAME }}" --password-stdin - name: Log in to Gitea Container Registry run: | echo "${{ secrets.GITHUB_TOKEN }}" | docker login git.chillcog.com -u "${{ github.repository_owner }}" --password-stdin - name: Detect and Build Images env: REPO_OWNER: ${{ github.repository_owner }} EVENT_NAME: ${{ github.event_name }} run: | apk add --no-cache bash findutils FILES_TO_BUILD="" REGISTRY_HOST="git.chillcog.com" IF_OWNER="${REPO_OWNER:-chillcog}" OWNER_LOWER=$(echo "$IF_OWNER" | tr '[:upper:]' '[:lower:]') if [ "$EVENT_NAME" = "schedule" ] || [ "$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=$(find . -maxdepth 1 -name "*.yml" -o -name "*.yaml") 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_base="${filename%.*}" image_name=$(echo "$image_base" | tr '[:upper:]' '[:lower:]') echo "---------------------------------------------------" echo "Processing: $file -> Target: ${REGISTRY_HOST}/${OWNER_LOWER}/${image_name}:latest" echo "---------------------------------------------------" docker build \ -f "$file" \ -t "${REGISTRY_HOST}/${OWNER_LOWER}/${image_name}:latest" \ . docker push "${REGISTRY_HOST}/${OWNER_LOWER}/${image_name}:latest" done