diff --git a/.gitea/workflows/ci-cd.yaml b/.gitea/workflows/ci-cd.yaml index 5487772..2e5f2ff 100644 --- a/.gitea/workflows/ci-cd.yaml +++ b/.gitea/workflows/ci-cd.yaml @@ -6,31 +6,7 @@ name: CI/CD Pipeline on: - # Workflow dispatch with optional parameters for flexible testing - workflow_dispatch: - inputs: - skip_ci: - description: 'Skip CI pipeline and go straight to Docker push' - required: false - type: boolean - default: false - docker_only: - description: 'Run only Docker push steps (requires skip_ci=true)' - required: false - type: boolean - default: false - workflow_dispatch: - inputs: - skip_ci: - description: 'Skip CI pipeline and go straight to Docker push' - required: false - type: boolean - default: false - docker_only: - description: 'Run only Docker push steps (requires skip_ci=true)' - required: false - type: boolean - default: false + workflow_dispatch: {} push: branches: - main @@ -331,54 +307,26 @@ jobs: - docker-push: - name: Docker Push + + # Trigger Docker push workflow on main branch + trigger-docker-push: + name: Trigger Docker Push needs: [build-cache, ci-pipeline] runs-on: ubuntu-latest-ca - # Run conditions: standard checks + main branch + feature branch + docker_only override - if: "!contains(github.event.head_commit.message, '[skip ci]') && github.actor != 'ci-bot' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/feature/move-docker-job' || github.event.inputs.docker_only == 'true')" + if: "!contains(github.event.head_commit.message, '[skip ci]') && github.actor != 'ci-bot' && github.ref == 'refs/heads/main'" steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Login to Gitea Container Registry - uses: docker/login-action@v3 + - name: Trigger Docker Push Workflow + uses: actions/github-script@v6 with: - registry: ${{ env.CI_REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.PACKAGES_TOKEN }} - - - name: Build and push Docker image - run: | - source VERSION - IMAGE_VERSION="$MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}" - - # Use the template file with proper dependency hash replacement - DEPS_HASH="${{ needs.build-cache.outputs.deps_hash }}" - echo "Using dependency hash: $DEPS_HASH" - - # Create Dockerfile.prod from template - sed "s/{{DEPS_HASH}}/$DEPS_HASH/g" docker/Dockerfile.prod.template > docker/Dockerfile.prod - - TAGS="$IMAGE_VERSION latest ${{ github.sha }}" - echo "Building Docker image with tags: $TAGS" - - # Build the production image - docker build -t dance-lessons-coach -f docker/Dockerfile.prod . - - for TAG in $TAGS; do - IMAGE_NAME="${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:$TAG" - echo "Tagging and pushing: $IMAGE_NAME" - docker tag dance-lessons-coach "$IMAGE_NAME" - docker push "$IMAGE_NAME" - done - - - name: Show published images - run: | - source VERSION - IMAGE_VERSION="$MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}" - echo "📦 Published Docker images:" - echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:$IMAGE_VERSION" - echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:latest" - echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:${{ github.sha }}" + script: | + await github.rest.actions.createWorkflowDispatch({ + owner: 'arcodange', + repo: 'dance-lessons-coach', + workflow_id: 'docker-push.yaml', + ref: 'main', + inputs: { + deps_hash: '${{ needs.build-cache.outputs.deps_hash }}', + ref: 'main' + } + }); diff --git a/.gitea/workflows/docker-push.yaml b/.gitea/workflows/docker-push.yaml new file mode 100644 index 0000000..8cf19f2 --- /dev/null +++ b/.gitea/workflows/docker-push.yaml @@ -0,0 +1,80 @@ +--- +# dance-lessons-coach Docker Push Workflow +# Separate workflow for Docker image building and pushing +# Can be triggered manually or by CI/CD workflow + +name: Docker Push + +on: + # Manual trigger only - no automatic triggers + workflow_dispatch: + inputs: + deps_hash: + description: 'Dependency hash from build-cache job' + required: true + type: string + ref: + description: 'Git reference (branch/tag)' + required: false + type: string + default: '' + +# Environment variables +env: + GITEA_INTERNAL: "https://gitea.arcodange.lab/" + GITEA_EXTERNAL: "https://gitea.arcodange.fr/" + GITEA_ORG: "arcodange" + GITEA_REPO: "dance-lessons-coach" + CI_REGISTRY: "gitea.arcodange.lab" + +jobs: + docker-push: + name: Docker Push + runs-on: ubuntu-latest-ca + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.ref || github.ref }} + + - name: Login to Gitea Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.CI_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.PACKAGES_TOKEN }} + + - name: Build and push Docker image + run: | + source VERSION + IMAGE_VERSION="$MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}" + + # Use the provided dependency hash + DEPS_HASH="${{ github.event.inputs.deps_hash }}" + echo "Using dependency hash: $DEPS_HASH" + + # Create Dockerfile.prod from template + sed "s/{{DEPS_HASH}}/$DEPS_HASH/g" docker/Dockerfile.prod.template > docker/Dockerfile.prod + + TAGS="$IMAGE_VERSION latest ${{ github.sha }}" + echo "Building Docker image with tags: $TAGS" + + # Build the production image + docker build -t dance-lessons-coach -f docker/Dockerfile.prod . + + for TAG in $TAGS; do + IMAGE_NAME="${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:$TAG" + echo "Tagging and pushing: $IMAGE_NAME" + docker tag dance-lessons-coach "$IMAGE_NAME" + docker push "$IMAGE_NAME" + done + + - name: Show published images + run: | + source VERSION + IMAGE_VERSION="$MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}" + echo "📦 Published Docker images:" + echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:$IMAGE_VERSION" + echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:latest" + echo " - ${{ env.CI_REGISTRY }}/${{ env.GITEA_ORG }}/${{ env.GITEA_REPO }}:${{ github.sha }}"