chore: extract bootstrap into separate project with tests #1773
Workflow file for this run
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: 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: 'awslabs/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' | |
}) |