udondan/iam-floyd

View on GitHub
.github/workflows/generate.yml

Summary

Maintainability
Test Coverage
---
name: Generate Code from AWS documentation

on:
  schedule:
    # Why 1:57 not and 2:00? Because most hourly jobs probably run at the hour.
    # Keeping concurrent jobs low reduces hardware requirements, being nice to
    # GitHub and the environment.
    - cron: 57 1 * * *
  workflow_dispatch:
    inputs:
      command:
        description: make command to run
        required: true
        default: generate
        type: choice
        options:
          - generate
          - generate-force

jobs:
  generate:
    runs-on: ubuntu-latest

    steps:
      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: 20.x

      - name: Checkout code
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0

      - name: Install dependencies
        run: make install

      - name: Generate code
        run: make generate
        if: ${{ github.event_name == 'schedule' }}

      - name: Generate code
        run: make ${{ github.event.inputs.command }}
        if: ${{ github.event_name == 'workflow_dispatch' }}

      - name: Check for changes # we expect at least 3 changes or we won't trigger a new release
        id: changes
        run: |
          set -xuo pipefail # we intentionally do not use -e here, as rc=1 means we have changes
          git diff
          echo "CHANGED=$(git diff --unified=0 -- stats | grep '^[+-]' | grep -v +++ | grep -v -- --- | wc -l | xargs)" >> $GITHUB_OUTPUT

      # fail if the index file does not exist.
      # this could happen if we cannot reach the AWS documentation, or the
      # format of the documentation has changed and therefore cannot generate
      # code.
      - name: Failsafe
        run: test -e lib/index.ts || exit 1
        if: steps.changes.outputs.CHANGED >= 3

      - name: Configure git
        run: |
          set -xeuo pipefail
          git config --local user.email "${{ secrets.RELEASE_MAIL }}"
          git config --local user.name "udondan"
        if: steps.changes.outputs.CHANGED >= 3

      - name: Update version refs
        run: |
          set -xeuo pipefail
          perl -pi -e 's/^(\d+\.)(\d+)(\.\d+)$/($1).($2+1).".0"/e' VERSION
          make update-version-refs
        if: steps.changes.outputs.CHANGED >= 3

      - name: Update stats in documentation
        run: make stats
        if: steps.changes.outputs.CHANGED >= 3

      - name: Generate changelog for next release
        run: |
          set -xeuo pipefail
          make changelog
          git add CHANGELOG/*
        if: steps.changes.outputs.CHANGED >= 3

      - name: Regenerate code example results
        run: make regenerate-code-example-results
        if: steps.changes.outputs.CHANGED >= 3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

      - name: Add all changes
        run: |
          set -xeuo pipefail
          rm -rf package-lock.json node_modules *.tsbuildinfo &&
          git add *
        if: steps.changes.outputs.CHANGED >= 3

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.OVERRIDE_TOKEN }}
          commit-message: Adds latest IAM updates from AWS
          title: Adds latest IAM updates from AWS
          body: Adds latest IAM updates from AWS
          branch: iam-updates
          delete-branch: true
          committer: udondan <${{ secrets.RELEASE_MAIL }}>
          author: udondan <${{ secrets.RELEASE_MAIL }}>
          labels: automerge
        if: steps.changes.outputs.CHANGED >= 3