Skip to content

Update README.md

Update README.md #4

name: codegen diff preview
# This job will generate a codegen output diff comparing the target base ref with current HEAD ref and push it to S3
# and comment on GitHub PR with a link to the HTML output.
on:
pull_request:
types:
- opened
- reopened
- synchronize
permissions:
id-token: write
contents: read
pull-requests: write
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: ci-codegen-diff-${{ github.ref }}
cancel-in-progress: true
env:
JAVA_VERSION: 17
RUN: ${{ github.run_id }}-${{ github.run_number }}
DIFF2HTML_VERSION: 5.2.5
# Below is the set of services that are generated for codegen preview
# These are carefully selected to exercise every Smithy protocol.
# - @awsJson1_0: dynamodb
# - @awsJson1_1: codebuild
# - @awsQuery: sts
# - @ec2Query: ec2
# - @restJson1: polly
# - @restXml: s3
PREVIEW_SERVICES: +dynamodb,+codebuild,+sts,+ec2,+polly,+s3
HEAD_BRANCH_NAME: __tmp-localonly-head
BASE_BRANCH_NAME: __tmp-localonly-base
jobs:
generate-codegen-diff:
runs-on: ubuntu-latest
name: Generate diff and upload to S3
outputs:
bot-message: ${{ steps.generate-diff.outputs.codegen-diff-msg }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
path: 'aws-sdk-kotlin'
- uses: actions/checkout@v4
with:
repository: 'awslabs/aws-kotlin-repo-tools'
path: 'aws-kotlin-repo-tools'
- uses: actions/checkout@v4
with:
repository: 'smithy-lang/smithy-kotlin'
fetch-depth: 0
path: 'smithy-kotlin'
- uses: actions/checkout@v4
with:
repository: 'smithy-lang/smithy-rs'
path: 'smithy-rs'
sparse-checkout: |
tools/ci-build/difftags
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: 'corretto'
cache: 'gradle'
- name: Install deps and setup environment
run: |
# store off a copy of head ref of ci.py, otherwise base ref generation will use a different version of this script
CODEGEN_DIFF_REVISIONS=${{ runner.temp }}/codegen-diff-revisions.py
cp $GITHUB_WORKSPACE/aws-sdk-kotlin/.github/scripts/codegen-diff-revisions.py $CODEGEN_DIFF_REVISIONS
echo "CODEGEN_DIFF_REVISIONS=$CODEGEN_DIFF_REVISIONS" >> "$GITHUB_ENV"
echo "REPO_TOOLS=$GITHUB_WORKSPACE/aws-kotlin-repo-tools" >> "$GITHUB_ENV"
echo "SMITHY_KOTLIN_DIR=$GITHUB_WORKSPACE/smithy-kotlin" >> "$GITHUB_ENV"
echo "SDK_DIR=$GITHUB_WORKSPACE/aws-sdk-kotlin" >> "$GITHUB_ENV"
echo "installing smithy-rs diff tooling"
pushd $GITHUB_WORKSPACE/smithy-rs/tools/ci-build/difftags
cargo install --path .
difftags --version
popd
- name: Generate code for head ref
run: |
branch=$(python3 $REPO_TOOLS/scripts/ci.py get-branch $SDK_DIR)
pushd $SMITHY_KOTLIN_DIR
if git ls-remote --quiet --exit-code --heads origin refs/heads/$branch
then
echo "using smithy-kotlin branch $branch for head ref codegen"
else
# in the case of feature branches with tentacles we may or may not have a corresponding base ref in smithy-kotlin
# if we do let's use that, otherwise fallback to main
echo "$branch does not exist in smithy-kotlin, will attempt base ref $GITHUB_BASE_REF"
branch=$GITHUB_BASE_REF
fi
python3 $REPO_TOOLS/scripts/ci.py -v set-branch --branch $branch
popd
pushd $SDK_DIR
git checkout -b $HEAD_BRANCH_NAME
$CODEGEN_DIFF_REVISIONS codegen --bootstrap ${{ env.PREVIEW_SERVICES }}
popd
- name: Generate code for base ref
run: |
branch=$GITHUB_BASE_REF
echo "checkout smithy-kotlin at base ref: $branch"
pushd $SMITHY_KOTLIN_DIR
git switch -f main
python3 $REPO_TOOLS/scripts/ci.py -v set-branch --branch $branch
popd
echo "resetting aws-sdk-kotlin"
pushd $SDK_DIR
git switch -f main
python3 $REPO_TOOLS/scripts/ci.py -v set-branch --branch $branch
git checkout -b $BASE_BRANCH_NAME
$CODEGEN_DIFF_REVISIONS codegen --bootstrap ${{ env.PREVIEW_SERVICES }}
popd
- name: Generate diffs
id: generate-diff
run: |
pushd $SDK_DIR
$CODEGEN_DIFF_REVISIONS \
--head-sha ${{ github.event.pull_request.head.sha }} \
generate-diffs \
--base-sha ${{ github.event.pull_request.base.sha }} \
$BASE_BRANCH_NAME $HEAD_BRANCH_NAME
cat ./tmp-codegen-diff/bot-message
{
echo 'codegen-diff-msg<<DIFF_MSG_EOF'
echo "$(cat ./tmp-codegen-diff/bot-message)"
echo 'DIFF_MSG_EOF'
} >> "$GITHUB_OUTPUT"
echo $GITHUB_OUTPUT
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: ${{ secrets.CI_AWS_ROLE_ARN }}
aws-region: us-west-2
- name: Upload diff to S3
run: |
SDK_DIR=$GITHUB_WORKSPACE/aws-sdk-kotlin
pushd $SDK_DIR
if [[ -d ./tmp-codegen-diff/${{ github.event.pull_request.base.sha }} ]]; then
aws s3 cp ./tmp-codegen-diff/${{ github.event.pull_request.base.sha }} \
"s3://${{ secrets.CDN_S3_BUCKET_NAME }}/codegen-diff/${{ github.event.pull_request.base.sha }}" --recursive
fi
# TODO - generate doc preview for N services and upload and link as well
post-bot-comment:
name: Post bot comment
runs-on: ubuntu-latest
needs:
- generate-codegen-diff
steps:
- name: Post bot comment
uses: actions/github-script@v5
with:
script: |
await github.rest.issues.createComment({
issue_number: ${{ github.event.number }},
owner: context.repo.owner,
repo: context.repo.repo,
body: '${{ needs.generate-codegen-diff.outputs.bot-message }}\n\n'
})