Skip to content

InitiateRelease

InitiateRelease #94

name: InitiateRelease
on:
workflow_dispatch:
schedule:
- cron: 0 18 * * 1-5
jobs:
GenerateConfig:
runs-on: ubuntu-latest
outputs:
stage_exit_code: ${{ steps.stage.outputs.stage_exit_code }}
push_exit_code: ${{ steps.push.outputs.push_exit_code }}
pr_exit_code: ${{ steps.pr.outputs.pr_exit_code }}
permissions:
id-token: write
contents: write
pull-requests: write
env:
IAM_INSTANCE_PROFILE_ARN: ${{ secrets.IAM_INSTANCE_PROFILE_ARN }}
GH_TOKEN: ${{ github.token }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create Release Branch
run: |
date=$(date '+%Y%m%d')
git checkout -b release-${date}
- name: Install xmllint
run: |
# generate-release-vars.sh depends on these packages
sudo apt-get update && sudo apt-get install libxml2-utils
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AMI_GENERATE_CONFIG_ROLE }}
aws-region: us-west-2
- name: Configure Bot Alias
run: |
git config --global user.name "GenerateConfig Action"
git config --global user.email "[email protected]"
- name: Check AL1 Update
run: ./scripts/check-update.sh al1
- name: Check AL2 Update
run: ./scripts/check-update.sh al2
- name: Check AL2023 Update
run: ./scripts/check-update.sh al2023
- name: Check for changes
id: stage
run: |
# Git diff returns exit code of 1 when there is a change staged
# We need the set statements to prevent erroring out
set +e
git diff --cached --quiet
echo "stage_exit_code=$?" >> "$GITHUB_OUTPUT"
set -e
- name: Commit and Push Changes
id: push
if: ${{ steps.stage.outputs.stage_exit_code == 1 }}
run: |
date=$(date '+%Y%m%d')
git commit -m "Release ${date}"
git status
git push --set-upstream origin release-${date}
echo "push_exit_code=$?" >> "$GITHUB_OUTPUT"
- name: Open PR for Branch
id: pr
if: ${{ steps.stage.outputs.stage_exit_code == 1 && steps.push.outputs.push_exit_code == 0 }}
run: |
date=$(date '+%Y%m%d')
gh pr create --base main --head release-${date} --title "Release ${date}" --body "Enhanced ECS Optimized AMI Release changes"
echo "pr_exit_code=$?" >> "$GITHUB_OUTPUT"
PushToCodeCommit:
needs: GenerateConfig
if: ${{ needs.GenerateConfig.outputs.stage_exit_code == 1 && needs.GenerateConfig.outputs.push_exit_code == 0 && needs.GenerateConfig.outputs.pr_exit_code == 0 }}
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{secrets.AMI_MIRROR_ROLE}}
aws-region: us-west-2
- name: Delete shinkansen branch on codecommit repository
run: |
aws codecommit delete-branch --repository-name amazon-ecs-ami-mirror --branch-name shinkansen
- name: Sleeping for 30 seconds after CodeCommit branch deletion and before recreating it
run: |
sleep 30
- name: Configure prereqs
run: |
git config --global user.name "Github Action"
git config --global user.email "[email protected]"
pip install git-remote-codecommit
- name: Mirror to shinkansen branch on codecommit repository
run: |
date=$(date '+%Y%m%d')
git clone --single-branch --branch release-${date} https://github.com/aws/amazon-ecs-ami ecsAmiGithub
git clone codecommit::us-west-2://amazon-ecs-ami-mirror ecsAmiCodeCommit
cp ecsAmiCodeCommit/Config ecsAmiGithub/
cd ecsAmiGithub
git add Config
git commit -m "Release ${date}"
git remote add codecommit codecommit::us-west-2://amazon-ecs-ami-mirror
git push codecommit release-${date}:shinkansen
MetricPublish:
needs: [GenerateConfig, PushToCodeCommit]
if: ${{ always() }}
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{secrets.AMI_MIRROR_ROLE}}
aws-region: us-west-2
- name: Failure Scenario
if: ${{ needs.GenerateConfig.result == 'failure' || needs.PushToCodeCommit.result == 'failure' }}
run: aws cloudwatch put-metric-data --metric-name EcsAmiGithubActionStatus --namespace ECSAMIRelease --value "-1"
- name: Release Kickoff Scenario
if: ${{ needs.PushToCodeCommit.result == 'success'}}
run: aws cloudwatch put-metric-data --metric-name EcsAmiGithubActionStatus --namespace ECSAMIRelease --value 1
- name: No Release Scenario
if: ${{ needs.GenerateConfig.result == 'success' && needs.PushToCodeCommit.result == 'skipped' }}
run: aws cloudwatch put-metric-data --metric-name EcsAmiGithubActionStatus --namespace ECSAMIRelease --value 0