-
Notifications
You must be signed in to change notification settings - Fork 49
155 lines (143 loc) · 5.54 KB
/
codegen-preview.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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: 11
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'
ref: 'ci-utils'
path: 'aws-kotlin-repo-tools'
- uses: actions/checkout@v4
with:
repository: 'awslabs/smithy-kotlin'
fetch-depth: 0
path: 'smithy-kotlin'
- uses: actions/cache@v2
name: Gradle Cache
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: ${{ env.JAVA_VERSION }}
- name: Install deps and setup environment
run: |
npm install -g diff2html-cli@${{ env.DIFF2HTML_VERSION }}
env | sort
# 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"
- name: Generate code for head ref
run: |
branch=$(python3 $REPO_TOOLS/scripts/ci.py get-branch $SDK_DIR)
echo "using branch $branch"
python3 $REPO_TOOLS/scripts/ci.py -v set-branch --branch $branch $SMITHY_KOTLIN_DIR
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
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
echo "codegen-diff-msg<<EOF" >> $GITHUB_OUTPUT
cat ./tmp-codegen-diff/bot-message) >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
popd
- 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'
})