Skip to content

pipeline_61baa387-aab1-4c7a-a2a2-6a01e38b7c40 #2

pipeline_61baa387-aab1-4c7a-a2a2-6a01e38b7c40

pipeline_61baa387-aab1-4c7a-a2a2-6a01e38b7c40 #2

name: >-
coffee-catalogue-api-service_container-dev_app_8081d02_env_c97c7fd Pipeline
(Skyu Generated)
'on':
push:
branches:
- main
paths-ignore:
- .github/workflows/**
- .trivyignore
- Readme.md
- README.md
workflow_dispatch: {}
repository_dispatch:
types: pipeline_61baa387-aab1-4c7a-a2a2-6a01e38b7c40
env:
ENCODED_PIPELINE_SECRET: >-
${{secrets.COFFEECATALOGUESVC_COFFEECATALOGUEAPISERVICE_CONTAINERDEV_APP_8081D02_ENV_C97C7FD}}
COMMIT_ID: ${{github.event.client_payload.commitId || github.sha || github.run_id}}
BRANCH_NAME: >-
${{github.event.client_payload.branchName || github.event.branch ||
github.ref_name}}
DEPLOY_STEP_SHOULD_DEPLOY: 'true'
jobs:
code-scan:
name: Code Scan
permissions: write-all
runs-on: ubuntu-latest
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Checkout repository for Code Scan'
uses: actions/checkout@v4
- name: 'Run :: Decoding Secrets e39226'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Install Semgrep, Scan and Print'
run: >-
docker run -i -v "${PWD}:/src" semgrep/semgrep semgrep /src --json
--quiet > semgrep_results.json
- name: 'Run :: Upload Code Scan Report'
run: |2-
SARIF_FILE="semgrep_results.json"
if [ -n "$SARIF_FILE" ]; then
cat "$SARIF_FILE" > ${{ env.COMMIT_ID }}-code-scan-report.sarif
echo "Uploading CodeQL Results to S3 :: ${{ env.COMMIT_ID }}-code-scan-report.sarif"
response=$(curl -X POST -F 'file=@${{ env.COMMIT_ID }}-code-scan-report.sarif' -F 'provider=aws' -F 'resourceType=code-scan-report' -F 'cloudStoragePath=/${{ env.PIPELINE_APPLICATION_ID }}/code-scan-reports/' -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-auth-by: sa' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-resource-id: ${{ env.PIPELINE_APPLICATION_ID }}' -H 'Content-Type: multipart/form-data' '${{ env.S3_UPLOAD_ENDPOINT }}')
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
fi
else
echo "SARIF file not found."
fi
_status-pending:
name: ' Status Pending'
permissions: write-all
env:
CONTEXT_JSON: ${{ toJson(github) }}
runs-on: ubuntu-latest
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Pipeline Started'
env:
RUN_ID: ${{ github.run_id }}
run: |2-
context=$(echo "$CONTEXT_JSON" | jq --arg sha "$COMMIT_ID" '.sha = $sha' | jq -c . | base64)
response=$(curl -X PUT -d "runId=$RUN_ID&context=$context" -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.PIPELINE_SERVICE_EP }}/${{ env.PIPELINE_ID }}/PENDING?releaseId=${{ github.event.client_payload.releaseData.releaseId }}")
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
fi
_release-info:
name: ' Release Info'
permissions: write-all
runs-on: ubuntu-latest
if: ${{ github.event.client_payload.releaseData }}
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Pipeline Release'
env:
RELEASE_ID: ${{ github.event.client_payload.releaseData.releaseId }}
PIPELINE_ID: ${{ github.event.client_payload.releaseData.pipelineId }}
RUN_ID: ${{ github.run_id }}
APPLICATION_ID: ${{ github.event.client_payload.releaseData.appId }}
USER_NAME: ${{ github.repository_owner }}
REPOSITORY: ${{ github.repository }}
COMMIT_USER: ${{ github.event.head_commit.author.name }}
COMMIT_MESSAGE: ${{ github.event.client_payload.commitMessage }}
COMMIT_TIME: ${{ github.event.head_commit.timestamp }}
run: |2-
echo "Pipeline Release Information"
echo "////////////////////////////"
echo "releaseId : $RELEASE_ID"
echo "pipelineId : $PIPELINE_ID"
echo "pipelineRunId : $RUN_ID"
echo "applicationId : $APPLICATION_ID"
echo "versionId : ${{ env.DEPLOYMENT_APP_VERSION_ID }}"
echo "credentialId : ${{ env.PIPELINE_CREDENTIAL_ID }}"
echo "userName : $USER_NAME"
echo "repositoryName : $REPOSITORY"
echo "commitId : ${{ env.COMMIT_ID }}"
echo "commitHash : ${{ env.COMMIT_ID }}"
echo "commitAvatar : https://github.com/$COMMIT_USER.png"
echo "commitTime : $COMMIT_TIME"
echo "commitMessage : $COMMIT_MESSAGE"
echo "commitUser : $COMMIT_USER"
echo "shouldDeploy : ${{ env.DEPLOY_STEP_SHOULD_DEPLOY }}"
echo "containerName : ${{ env.DEPLOYMENT_CONTAINER_NAME }}"
echo "imageRegistryURL : ${{ env.IMAGE_NAME }}",
# Storing Release Information for Deployment
response=$(curl -X POST -d "releaseId=$RELEASE_ID&pipelineId=$PIPELINE_ID&pipelineRunId=$RUN_ID&versionId=${{ env.DEPLOYMENT_APP_VERSION_ID }}&applicationId=${{ github.event.client_payload.releaseData.appId }}&credentialId=${{ env.PIPELINE_CREDENTIAL_ID }}&userName=$USER_NAME&repositoryName=$REPOSITORY&commitId=${{ env.COMMIT_ID }}&commitData[commitHash]=${{ env.COMMIT_ID }}&commitData[commitAvatar]=https://github.com/$COMMIT_USER.png&commitData[commitTime]=$COMMIT_TIME&commitData[commitMessage]=$COMMIT_MESSAGE&commitData[commitUser]=$COMMIT_USER&shouldDeploy=${{ env.DEPLOY_STEP_SHOULD_DEPLOY }}&containerName=${{ env.DEPLOYMENT_CONTAINER_NAME }}&imageRegistryURL=${{ env.IMAGE_NAME }}" -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.PIPELINE_SERVICE_EP }}/release/pipeline")
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
fi
build-and-push:
name: Build And Push
permissions: write-all
runs-on: ubuntu-latest
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Configure AWS credentials'
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ env.roleARN }}
role-session-name: skyu-pipeline-assume-role-session
aws-region: ${{ env.region }}
- name: 'Run :: Login to Amazon ECR'
id: skyu-login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: 'Run :: Check if image already exists'
id: check-image-existence-step-id
run: |2-
if docker pull ${{ env.IMAGE_NAME }}:${{env.COMMIT_ID}} >/dev/null 2>&1;
then
echo "Image exists in registry."
echo "STEPS_CAN_PROCEED=false" >> $GITHUB_ENV
else
echo "Image does not exist in registry."
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
fi
- name: 'Run :: Build With Docker'
run: >-
docker build -t ${{ env.IMAGE_NAME }}:${{ env.COMMIT_ID }} -f
${{env.DOCKER_FILE_PATH}} --build-arg BUILT_WITH=SKYU${{
env.DOCKER_BUILD_ARGS }} ${{env.DOCKER_BUILD_CONTEXT}}
if: ${{ env.STEPS_CAN_PROCEED == 'true' }}
- name: 'Run :: Trivy vulnerability scanner'
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ env.IMAGE_NAME }}:${{ env.COMMIT_ID }}
format: ${{env.TRIVY_RESULT_FORMAT}}
output: ${{ env.COMMIT_ID }}-image-vulnerability-report.json
exit-code: ${{env.TRIVY_SCAN_EXIT_CODE}}
vuln-type: os,library
severity: ${{env.SCAN_SEVERITY}}
hide-progress: true
if: ${{ env.STEPS_CAN_PROCEED == 'true' }}
- name: 'Run :: Evaluate Trivy Results'
run: |2-
# Minifying Json
jq -c '.' ${{ env.COMMIT_ID }}-image-vulnerability-report.json > ${{ env.COMMIT_ID }}-image-vulnerability-report.min.json
trivy_result=$(cat "${{ env.COMMIT_ID }}-image-vulnerability-report.min.json")
# Set the desired severity level
desiredSeverity="${{ env.SCAN_SEVERITY }}"
IFS=',' read -ra severities <<< "$desiredSeverity" # Split the severity string
# Print the tags array for debugging
jq '.runs[0].tool.driver.rules[].properties.tags' "${{ env.COMMIT_ID }}-image-vulnerability-report.json"
VULNERABILITY_COUNT=0
for severity in "${severities[@]}"; do
count=$(jq --arg severity "$severity" '.runs[0].tool.driver.rules | map(select(.properties.tags and (.properties.tags | map(tostring) | index($severity) // empty))) | length' "${{ env.COMMIT_ID }}-image-vulnerability-report.json")
echo "Number of $severity vulnerabilities: $count"
VULNERABILITY_COUNT=$((VULNERABILITY_COUNT + count))
done
echo "Total Number of vulnerabilities: $VULNERABILITY_COUNT"
if [ "$VULNERABILITY_COUNT" -gt 0 ]; then
echo "STEPS_CAN_PROCEED=false" >> $GITHUB_ENV
echo "VULNERABILITY_COUNT=$VULNERABILITY_COUNT" >> $GITHUB_ENV
fi
echo "ARE_TRIVY_RESULTS_EVALUATED=true" >> $GITHUB_ENV
if: ${{ env.STEPS_CAN_PROCEED == 'true' }}
- name: 'Run :: Upload Trivy Result To S3'
env:
RUN_ID: ${{ github.run_id }}
run: |2-
# Minifying Json
jq -c '.' ${{ env.COMMIT_ID }}-image-vulnerability-report.json > ${{ env.COMMIT_ID }}-image-vulnerability-report.min.json
# Uploading Minified Trivy Resuls
response=$(curl -X POST -F 'file=@${{ env.COMMIT_ID }}-image-vulnerability-report.min.json' -F 'provider=aws' -F 'resourceType=image-vulnerability-report' -F 'cloudStoragePath=/${{ env.PIPELINE_APPLICATION_ID }}/image-vulnerability-reports/' -F 'pipelineRunId=$RUN_ID' -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-resource-id: ${{ env.PIPELINE_APPLICATION_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: multipart/form-data' "${{ env.S3_UPLOAD_ENDPOINT }}")
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
fi
if: ${{ env.ARE_TRIVY_RESULTS_EVALUATED == 'true' }}
- name: 'Run :: Check Pipeline Safety'
run: |2-
if [ "${{ env.VULNERABILITY_COUNT }}" -gt 0 ]; then
echo "UN-SAFE to continue Pipeline"
exit 1
else
echo "SAFE to continue Pipeline"
fi
- name: 'Run :: Create Repository'
run: >-
aws ecr create-repository --repository-name ${{ env.REPOSITORY_NAME }}
|| true
if: ${{ env.STEPS_CAN_PROCEED == 'true' }}
- name: 'Run :: Build, tag, and push image'
run: docker push ${{ env.IMAGE_NAME }}:${{ env.COMMIT_ID }}
if: ${{ env.STEPS_CAN_PROCEED == 'true' }}
outputs:
stepsCanProceed: ${{ env.STEPS_CAN_PROCEED }}
_status-success:
name: ' Status Success'
permissions: write-all
env:
CONTEXT_JSON: ${{ toJson(github) }}
runs-on: ubuntu-latest
needs:
- code-scan
- build-and-push
- deploy
if: ${{ !(failure() || cancelled()) }}
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Pipeline Success'
env:
RUN_ID: ${{ github.run_id }}
run: |2-
context=$(echo "$CONTEXT_JSON" | jq --arg sha "$COMMIT_ID" '.sha = $sha' | jq -c . | base64)
response=$(curl -X PUT -d "runId=$RUN_ID&context=$context" -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.PIPELINE_SERVICE_EP }}/${{ env.PIPELINE_ID }}/SUCCESS?releaseId=${{ github.event.client_payload.releaseData.releaseId }}")
_status-failed:
name: ' Status Failed'
permissions: write-all
env:
CONTEXT_JSON: ${{ toJson(github) }}
runs-on: ubuntu-latest
needs:
- code-scan
- build-and-push
- deploy
if: ${{ failure() || cancelled() }}
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Pipeline Failed'
env:
RUN_ID: ${{ github.run_id }}
run: |2-
context=$(echo "$CONTEXT_JSON" | jq --arg sha "$COMMIT_ID" '.sha = $sha' | jq -c . | base64)
response=$(curl -X PUT -d "runId=$RUN_ID&context=$context" -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.PIPELINE_SERVICE_EP }}/${{ env.PIPELINE_ID }}/FAILED?releaseId=${{ github.event.client_payload.releaseData.releaseId }}")
# Triggering SkyU Alerts
response=$(curl -X POST -d "labels[alertname]=pipelineFailed&labels[pipelineId]=${{ env.PIPELINE_ID }}&message=Pipeline Failed&messageTitle=Pipeline ${{ env.PIPELINE_ID }} Failed&status=firing" -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.FIRE_SKYU_ALERT_EP }}?organizationId=${{ env.PIPELINE_ORGANIZATION_ID }}&projectId=${{ env.PIPELINE_PROJECT_ID }}&environmentId=${{ env.PIPELINE_ENVIRONMENT_ID }}&token=${{ env.SERVICE_ACC_ACCESS_TOKEN_STRIPPED }}&authBy=sa")
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
fi
deploy:
name: Deploy
permissions: write-all
runs-on: ubuntu-latest
needs:
- build-and-push
if: >-
needs.build-and-push.outputs.stepsCanProceed == 'true' &&
github.event.client_payload.releaseData == null
steps:
- name: 'Run :: Start'
run: |2-
echo " Starting GitHub Action!" &&
echo "STEPS_CAN_PROCEED=true" >> $GITHUB_ENV
- name: 'Run :: Checkout repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 'Run :: Checkout Specific Commit'
env:
COMMIT_ID: ${{ github.event.client_payload.commitId }}
BRANCH_NAME: ${{ github.event.client_payload.branchName }}
if: >-
${{ github.event.client_payload.commitId != null ||
github.event.client_payload.branchName != null }}
run: |2-
echo "Starting the checkout process..."
git fetch --all
if [ -n "$COMMIT_ID" ]; then
echo "Commit ID provided: $COMMIT_ID"
git checkout $COMMIT_ID || true
echo "Checked out to commit ID: $COMMIT_ID"
elif [ -n "$BRANCH_NAME" ]; then
echo "Branch name provided: $BRANCH_NAME"
git checkout $BRANCH_NAME || true
echo "Checked out to branch: $BRANCH_NAME"
#Updating the commit Id
ACTUAL_COMMIT_ID=$(git rev-parse HEAD)
echo "Changing CommitId: $ACTUAL_COMMIT_ID"
echo "COMMIT_ID=$ACTUAL_COMMIT_ID" >> $GITHUB_ENV
else
echo "Skipping checkout..."
fi
- name: 'Run :: Decoding Secrets'
run: |2-
if [ ! -x "$(command -v jq)" ]; then
echo "jq not found, installing..."
sudo apt-get update
sudo apt-get install -y jq
fi
echo "${{ env.ENCODED_PIPELINE_SECRET }}" | base64 --decode | jq -r 'to_entries[] | "\(.key)=\(.value)"' | while read line; do echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}"; done
- name: 'Run :: Deploy and Notify Resource Service'
env:
RUN_ID: ${{ github.run_id }}
COMMIT_USER: ${{ github.event.head_commit.author.name }}
COMMIT_TIME: ${{ github.event.head_commit.timestamp }}
COMMIT_MESSAGE: >-
${{ github.event.head_commit.message ||
github.event.client_payload.commitMessage }}
run: |2-
response=$(curl -X PATCH -d "imageRegistryURL=${{ env.IMAGE_NAME }}&appVersionId=${{ env.DEPLOYMENT_APP_VERSION_ID }}&tag=${{ env.COMMIT_ID }}&containerName=${{ env.DEPLOYMENT_CONTAINER_NAME }}&shouldDeploy=${{env.DEPLOY_STEP_SHOULD_DEPLOY}}&pipelineRunId=$RUN_ID&commitDetails[commitHash]=${{ env.COMMIT_ID }}&commitDetails[commitAvatar]=https://github.com/$COMMIT_USER.png&commitDetails[commitTime]=$COMMIT_TIME&commitDetails[commitMessage]=$COMMIT_MESSAGE&commitDetails[commitUser]=$COMMIT_USER" -H 'Authorization: ${{ env.SERVICE_ACC_ACCESS_TOKEN }}' -H 'x-organization-id: ${{ env.PIPELINE_ORGANIZATION_ID }}' -H 'x-project-id: ${{ env.PIPELINE_PROJECT_ID }}' -H 'x-environment-id: ${{ env.PIPELINE_ENVIRONMENT_ID }}' -H 'x-application-id: ${{ env.PIPELINE_APPLICATION_ID }}' -H 'x-trace-id: ${{ env.PIPELINE_TRACE_ID }}' -H 'x-resource-id: ${{ env.PIPELINE_APPLICATION_ID }}' -H 'x-auth-by: sa' -H 'Content-Type: application/x-www-form-urlencoded' "${{ env.DEPLOYMENT_ENDPOINT }}")
status_code=$?
if [ $status_code -eq 0 ]; then
if echo "$response" | grep -q '"success":true'; then
echo "SUCCESS :: $response"
else
echo "FAILED :: $response"
exit 1
fi
else
echo "Failed to deploy. HTTP status code: $status_code"
exit 1
fi