refactor workflow to compare versions between 'app' and 'main' before… #20
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Push Docker Image | |
on: | |
push: | |
branches: | |
- app | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
# Step 1: Checkout the 'app' branch code | |
- name: Checkout app branch code | |
uses: actions/checkout@v4 | |
with: | |
ref: app | |
# Step 2: Install jq to parse package.json | |
- name: Install jq | |
run: sudo apt-get install -y jq | |
# Step 3: Get version from 'app' branch | |
- name: Get version from app branch | |
id: app_version | |
run: | | |
APP_VERSION=$(cat app/package.json | jq -r .version) | |
echo "APP_VERSION=$APP_VERSION" >> $GITHUB_ENV | |
echo "Version on 'app' branch: $APP_VERSION" | |
# Step 4: Checkout the 'main' branch code | |
- name: Checkout main branch code | |
uses: actions/checkout@v4 | |
with: | |
ref: main | |
# Step 5: Get version from 'main' branch | |
- name: Get version from main branch | |
id: main_version | |
run: | | |
MAIN_VERSION=$(cat app/package.json | jq -r .version) | |
echo "MAIN_VERSION=$MAIN_VERSION" >> $GITHUB_ENV | |
echo "Version on 'main' branch: $MAIN_VERSION" | |
# Step 6: Set up Docker in the workflow | |
- name: Set up Docker | |
uses: docker/setup-buildx-action@v3 | |
# Step 7: Log in to Docker Hub using secrets (Optional) | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USER }} | |
password: ${{ secrets.DOCKER_PASS }} | |
# Step 8: Build Docker image with version tag (Optional) | |
- name: Build Docker image | |
run: | | |
docker build -t ${{ secrets.DOCKER_USER }}/gitops-app:${{ env.APP_VERSION }} app/. | |
# Step 9: Push Docker image to Docker Hub (Optional) | |
- name: Push Docker image | |
run: | | |
docker push ${{ secrets.DOCKER_USER }}/gitops-app:${{ env.APP_VERSION }} | |
# Step 10: Compare versions between 'app' and 'main' branches | |
- name: Compare versions | |
id: version_check | |
run: | | |
if [ "$APP_VERSION" != "$MAIN_VERSION" ]; then | |
echo "Version changed: Creating PR." | |
echo "VERSION_CHANGED=true" >> $GITHUB_ENV | |
else | |
echo "No version change: Skipping PR." | |
echo "VERSION_CHANGED=false" >> $GITHUB_ENV | |
fi | |
# Step 11: Create a Pull Request only if the version changed and Docker image was built successfully | |
- name: Create Pull Request | |
if: success() && env.VERSION_CHANGED == 'true' | |
uses: peter-evans/create-pull-request@v7 | |
with: | |
branch: merge-app-${{ env.APP_VERSION }} | |
title: "Automated PR: Merge 'app' into 'main' (Version ${{ env.APP_VERSION }})" | |
labels: image-built |