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 Deploy for Dev, QA, and Stable | |
on: | |
workflow_dispatch: | |
inputs: | |
RELEASE: | |
required: false | |
type: string | |
description: "The name of the release you want to deploy to stable." | |
pull_request: | |
types: [opened, reopened, synchronize] | |
branches: | |
- dev | |
pull_request_target: | |
types: [closed] | |
branches: | |
- dev | |
release: | |
types: [created] | |
env: | |
ARTIFACT_NAME: actions-demo | |
jobs: | |
build_test_and_deploy_dev: | |
runs-on: ubuntu-latest | |
if: | | |
github.event_name == 'pull_request' && github.base_ref == 'dev' || | |
(github.event_name == 'pull_request_target' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev') | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Get 7 digit SHA | |
run: | | |
echo "SHA_SHORT=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_ENV | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
registry: docker.io | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Run tests | |
run: | | |
echo "Fake running some test" | |
- name: Build Docker Image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: false | |
tags: | | |
kennyd3d/${{ env.ARTIFACT_NAME }}:${{ env.SHA_SHORT }} | |
- name: Push Docker Image if merged | |
if: ${{ github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev' }} | |
run: | | |
docker push kennyd3d/${{ env.ARTIFACT_NAME }}:${{ env.SHA_SHORT }} | |
echo "Docker image pushed with tag ${{ env.SHA_SHORT }}" | |
echo "# π Successfully pushed the tag ${{ env.SHA_SHORT }} to Artifactory" >> $GITHUB_STEP_SUMMARY | |
- name: Deploy to k8 | |
if: ${{ github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev' }} | |
run: | | |
echo "Pretending to deploy to k8" | |
echo "## Dev Deployment was a Success β " >> $GITHUB_STEP_SUMMARY | |
# Build test and deploy to qa namespace when a release tag is created | |
build_test_and_deploy_qa: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'release' && github.event.action == 'created' | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
registry: docker.io | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Preparing for deployment | |
run: | | |
TAG_NAME=${GITHUB_REF#refs/tags/} | |
SHA_SHORT=$(git rev-parse --short=7 ${TAG_NAME}) | |
echo "SHA_SHORT=${SHA_SHORT}" >> $GITHUB_ENV | |
echo "IMAGE_DEV=kennyd3d/${{ env.ARTIFACT_NAME }}:${{ env.SHA_SHORT }}" >> $GITHUB_ENV | |
echo "IMAGE_QA=kennyd3d/${{ env.ARTIFACT_NAME }}:${{ github.event.release.name }}" >> $GITHUB_ENV | |
- name: Retag and push Docker Image with Release Name | |
run: | | |
docker pull ${{ env.IMAGE_DEV }} | |
docker tag ${{ env.IMAGE_DEV }} ${{ env.IMAGE_QA }} | |
docker push ${{ env.IMAGE_QA }} | |
- name: Deploy to Stable k8 | |
run: | | |
echo "Test to deploy to Stable k8 using image ${{ env.IMAGE_QA }}" | |
- name: Give possible failure hint | |
if: failure() | |
run: | | |
echo "# β QA Failed to Deploy: Did you make sure you tagged the same commit that merged to Dev? π€" >> $GITHUB_STEP_SUMMARY | |
echo "DEV deployment: ${{ env.IMAGE_DEV }}| QA Deployment: ${{ env.IMAGE_QA }}" >> $GITHUB_STEP_SUMMARY | |
- name: Run success message on successful deployment | |
if: success() | |
run: | | |
echo "# π Successfully deployed ${{ env.IMAGE_QA }} to QA β " >> $GITHUB_STEP_SUMMARY | |
# Manually deploy the release given the release name | |
deploy_stable: | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
steps: | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
registry: docker.io | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Check if release exists in remote repo | |
run: | | |
echo "IMAGE_STABLE=kennyd3d/${{ env.ARTIFACT_NAME }}:${{ github.event.inputs.INPUT_TAG }}" >> $GITHUB_ENV | |
if ! docker manifest inspect kennyd3d/actions-demo:0.0.28-rc > /dev/null 2>&1; then | |
echo '# β Failed Stable Deployment: ${{ env.IMAGE_STABLE }} not found in artifactory' >> $GITHUB_STEP_SUMMARY | |
exit 1 | |
fi | |
- name: Deploy release to stable namespace | |
run: | | |
echo "Test to deploy to Stable k8 using image ${{ env.IMAGE_STABLE }}" | |
- name: Give possible failure hint | |
if: failure() | |
run: | | |
echo "## Stable Failed to Deploy ${{ env.IMAGE_STABLE }}: Did you type the correct release name? π€" >> $GITHUB_STEP_SUMMARY | |
- name: Run success message on successful deployment | |
if: success() | |
run: | | |
echo "# π Successfully deployed ${{ env.IMAGE_STABLE }} to Stable β " >> $GITHUB_STEP_SUMMARY |