-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
134 additions
and
43 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,70 +9,161 @@ on: | |
|
||
jobs: | ||
generate_docs_new_pr: | ||
if: ${{ contains(github.event.issue.labels.*.name, 'generate_go_docs') }} | ||
if: ${{ contains(github.event.pull_request.labels.*.name, 'generate_go_docs') }} | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
pull-requests: write | ||
repository-projects: read | ||
id-token: write | ||
contents: read | ||
|
||
steps: | ||
- name: Setup GitHub Token for reading Generate Go Doc Repo | ||
id: setup-github-token-read | ||
uses: smartcontractkit/.github/actions/setup-github-token@9e7cc0779934cae4a9028b8588c9adb64d8ce68c # [email protected] | ||
with: | ||
aws-role-arn: ${{ secrets.AWS_ROLE_ARN_READ_GENERATE_GO_DOC_REPO }} | ||
aws-lambda-url: ${{ secrets.GATI_LAMBDA_TT_URL }} | ||
aws-region: ${{ secrets.AWS_REGION }} | ||
|
||
- name: Configure git for private repository and install go tools | ||
env: | ||
GOPRIVATE: github.com/smartcontractkit/generate-go-function-docs | ||
run: | | ||
git config --global url."https://x-access-token:${{ steps.setup-github-token-read.outputs.access-token }}@github.com/".insteadOf "https://github.com/" | ||
go install github.com/smartcontractkit/[email protected] | ||
go install github.com/jmank88/[email protected] | ||
go install golang.org/x/tools/gopls@latest | ||
- name: Checkout current branch | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Setup Git | ||
run: | | ||
git config user.name "github-actions[bot]" | ||
git config user.email "github-actions[bot]@users.noreply.github.com" | ||
- name: Get PR details | ||
id: pr-details | ||
run: | | ||
echo "pr_number=$(jq -r .pull_request.number <<< "$GITHUB_EVENT_PATH")" >> $GITHUB_OUTPUT | ||
echo "pr_branch=$(jq -r .pull_request.head.ref <<< "$GITHUB_EVENT_PATH")" >> $GITHUB_OUTPUT | ||
echo "base_commit=${{ github.event.pull_request.base.sha }}" >> $GITHUB_OUTPUT | ||
echo "head_commit=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT | ||
- name: Detect changes related to current PR | ||
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | ||
id: changes | ||
with: | ||
filters: | | ||
seth: | ||
- 'seth/**/*.go' | ||
wasp: | ||
- 'wasp/**/*.go' | ||
havoc: | ||
- 'havoc/**/*.go' | ||
lib: | ||
- 'lib/**/*.go' | ||
k8s-test-runner: | ||
- 'k8s-test-runner/**/*.go' | ||
framework: | ||
- 'framework/**/*.go' | ||
# later add tools here or, if possible, make this filter dynamic so that it's created based on the go modules in the repository | ||
- name: Install go doc generator | ||
- name: Find all go modules in the repository and filter the ones that changed | ||
shell: bash | ||
id: go-modules | ||
env: | ||
FILTERS: ${{ steps.changes.outputs.changes }} | ||
run: | | ||
go install github.com/smartcontractkit/generate-go-function-docs@latest | ||
PATH=$PATH:$(go env GOPATH)/bin | ||
export PATH | ||
- name: Install gopls | ||
shell: bash | ||
run: | | ||
go install golang.org/x/tools/gopls@latest | ||
# Find all go projects | ||
gomods_output=$(gomods 2>&1) | ||
- name: Create a new branch | ||
run: | | ||
git checkout -b ${{ steps.pr-details.outputs.pr_branch }}-docs | ||
# Extract the parent directories of go.mod files | ||
parent_folders=$(echo "$gomods_output" | grep 'go\.mod$' | sed 's/\/go\.mod//' | sed 's/^[ \t]*//;s/[ \t]*$//' | xargs -n 1) | ||
# Convert parent directories into a JSON matrix | ||
echo "$parent_folders" | jq -R -s 'split("\n") | map(select(length > 0)) | map({folder: .})' > all_folders.json | ||
# Filter the directories that did not changeß | ||
jq --argjson filters "$FILTERS" 'map(select(.folder as $folder | $filters | index($folder)))' all_folders.json > filtered_folders.json | ||
echo "Filtered folder List JSON" | ||
cat filtered_folders.json | ||
- name: Generate go docs | ||
rm all_folders.json | ||
- name: Generate go docs for changed projects | ||
shell: bash | ||
env: | ||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | ||
run: | | ||
generate-go-function-docs diff -b ${{ steps.pr-details.outputs.base_commit }} -c ${{ steps.pr-details.outputs.head_commit }} -g fake_slash | ||
# Add go binary to PATH | ||
PATH=$PATH:$(go env GOPATH)/bin | ||
export PATH | ||
cat filtered_folders.json | jq -c '.[]' | while read -r item; do | ||
folder=$(echo "$item" | jq -r '.folder') | ||
echo "Processing folder: $folder" | ||
generate-go-function-docs diff -b ${{ github.event.pull_request.base.sha }} -c ${{ github.event.pull_request.head.sha }} --saveCosts --generator chatgpt --folder "$folder" | ||
cd "$folder" | ||
cd - | ||
done | ||
rm filtered_folders.json | ||
- name: Make sure code still compiles | ||
run: | | ||
go mod tidy | ||
go mod vendor | ||
go build ./... | ||
- name: Upload costs as artifact | ||
uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 | ||
with: | ||
name: generation-costs | ||
path: ./costs | ||
|
||
- name: Commit changes | ||
run: | | ||
git add . | ||
git commit -m "Add automatically generated go documentation" | ||
git push origin ${{ steps.pr-details.outputs.pr_branch }}-docs | ||
- name: Remove costs before committing | ||
shell: bash | ||
run: rm -rf costs | ||
|
||
- name: Setup GitHub Token for creating a new PR | ||
id: setup-github-token-write | ||
uses: smartcontractkit/.github/actions/setup-github-token@9e7cc0779934cae4a9028b8588c9adb64d8ce68c # [email protected] | ||
with: | ||
aws-role-arn: ${{ secrets.AWS_ROLE_ARN_CREATE_PR }} | ||
aws-lambda-url: ${{ secrets.GATI_LAMBDA_TT_URL }} | ||
aws-region: ${{ secrets.AWS_REGION }} | ||
|
||
- name: Create a new PR targeting current PR | ||
uses: peter-evans/create-pull-request@v5 | ||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 | ||
with: | ||
token: ${{ steps.setup-github-token-write.outputs.access-token }} | ||
branch: ${{ github.head_ref }}-docs | ||
base: ${{ github.head_ref }} | ||
title: "Go docs for PR#${{ github.event.pull_request.number }}" | ||
body: "This PR contains automatically generated go documentation for the PR#${{ github.event.pull_request.number }}. Please review the changes." | ||
commit-message: "[Bot] Add automatically generated go documentation" | ||
|
||
- name: Send Slack notification | ||
uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.25.0 | ||
if: failure() | ||
id: slack | ||
env: | ||
SLACK_BOT_TOKEN: ${{ secrets.QA_SLACK_API_KEY }} | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
base: ${{ env.pr_branch }} | ||
branch: ${{ steps.pr-details.outputs.pr_branch }}-docs | ||
title: "Go docs for PR#${{ env.pr_number }}" | ||
body: "This PR contains automatically generated go documentation for the PR#${{ env.pr_number }}. Please review the changes." | ||
channel-id: 'C049X3353K2' | ||
payload: | | ||
{ | ||
"attachments": [ | ||
{ | ||
"color": "#C62828", | ||
"blocks": [ | ||
{ | ||
"type": "section", | ||
"text": { | ||
"type": "mrkdwn", | ||
"text": "Go doc generation - Failed :x:" | ||
} | ||
}, | ||
{ | ||
"type": "section", | ||
"text": { | ||
"type": "mrkdwn", | ||
"text": "<@U060CGGPY8H>, please have a look." | ||
} | ||
}, | ||
{ | ||
"type": "section", | ||
"text": { | ||
"type": "mrkdwn", | ||
"text": "<${{ github.server_url }}/${{ github.repository }}/pull/${{ github.event.pull_request.number }}|PR#${{ github.event.pull_request.number }}> | <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run Details>" | ||
} | ||
} | ||
] | ||
} | ||
] | ||
} |