140 lines
5.0 KiB
YAML
140 lines
5.0 KiB
YAML
name: Comment driven automations
|
|
on:
|
|
issue_comment:
|
|
types: [ created ]
|
|
|
|
jobs:
|
|
comment-driven-automation:
|
|
if: |
|
|
github.event.issue.pull_request &&
|
|
startsWith(github.event.comment.body, '@opentelemetrybot ')
|
|
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Get command
|
|
env:
|
|
BODY: ${{ github.event.comment.body }}
|
|
run: |
|
|
# intentionally only looking at the first line of the body
|
|
command=$(echo "$BODY" | head -1 | sed "s/^@opentelemetrybot //")
|
|
echo "COMMAND=$command" >> $GITHUB_ENV
|
|
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
# history is needed for the update command to run "git merge"
|
|
fetch-depth: ${{ env.COMMAND == 'update' && '0' || '1' }}
|
|
# this is the personal access token used for "git push" below
|
|
# which is needed in order to trigger workflows
|
|
token: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
|
|
|
|
- name: Check out PR branch
|
|
if: |
|
|
env.COMMAND == 'spotless' ||
|
|
env.COMMAND == 'license' ||
|
|
env.COMMAND == 'apidiff' ||
|
|
env.COMMAND == 'update'
|
|
env:
|
|
NUMBER: ${{ github.event.issue.number }}
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
gh pr checkout $NUMBER
|
|
|
|
- name: This could take me a few minutes...
|
|
if: |
|
|
env.COMMAND == 'spotless' ||
|
|
env.COMMAND == 'license' ||
|
|
env.COMMAND == 'apidiff'
|
|
env:
|
|
GH_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
|
|
run: |
|
|
if [[ "$COMMAND" == "spotless" ]]; then
|
|
command="./gradlew spotlessApply"
|
|
elif [[ "$COMMAND" == "license" ]]; then
|
|
command="./gradlew generateLicenseReport"
|
|
elif [[ "$COMMAND" == "apidiff" ]]; then
|
|
command="./gradlew jApiCmp"
|
|
fi
|
|
gh pr comment $NUMBER --body "Running \`$command\`, this could take a few minutes..."
|
|
|
|
- name: Set up Gradle cache
|
|
if: |
|
|
env.COMMAND == 'spotless' ||
|
|
env.COMMAND == 'license' ||
|
|
env.COMMAND == 'apidiff'
|
|
uses: gradle/gradle-build-action@v2
|
|
with:
|
|
cache-read-only: true
|
|
|
|
- name: Use CLA approved github bot
|
|
if: |
|
|
env.COMMAND == 'spotless' ||
|
|
env.COMMAND == 'license' ||
|
|
env.COMMAND == 'apidiff' ||
|
|
env.COMMAND == 'update'
|
|
run: .github/scripts/use-cla-approved-github-bot.sh
|
|
|
|
- name: Set up JDK for running Gradle
|
|
uses: actions/setup-java@v3
|
|
with:
|
|
distribution: temurin
|
|
java-version: 17.0.6
|
|
|
|
- name: Run command
|
|
env:
|
|
NUMBER: ${{ github.event.issue.number }}
|
|
GH_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
|
|
run: |
|
|
available_commands="Available commands:
|
|
* \`@opentelemetrybot spotless\` - runs \`./gradlew spotlessApply\`
|
|
* \`@opentelemetrybot license\` - runs \`./gradlew generateLicenseReport\`
|
|
* \`@opentelemetrybot apidiff\` - runs \`./gradlew jApiCmp\`
|
|
* \`@opentelemetrybot update\` - updates branch with merge commit
|
|
* \`@opentelemetrybot rerun\` - re-runs failed checks (NOT IMPLEMENTED YET)
|
|
* \`@opentelemetrybot help\` - displays available commands
|
|
"
|
|
# TODO add thumbs up on triggering comment
|
|
if [[ "$COMMAND" == "spotless" ]]; then
|
|
./gradlew spotlessApply
|
|
if git diff --quiet; then
|
|
gh pr comment $NUMBER --body "Already up-to-date"
|
|
exit 0 # success
|
|
fi
|
|
git commit -a -m "./gradlew spotlessApply"
|
|
git push
|
|
elif [[ "$COMMAND" == "license" ]]; then
|
|
./gradlew generateLicenseReport
|
|
git add licenses
|
|
# there's always going to one line difference due to the timestamp included in the report
|
|
if [[ $(git diff --cached --shortstat licenses) == " 1 file changed, 1 insertion(+), 1 deletion(-)" ]]
|
|
then
|
|
gh pr comment $NUMBER --body "Already up-to-date"
|
|
exit 0 # success
|
|
fi
|
|
git commit -m "./gradlew generateLicenseReport"
|
|
git push
|
|
elif [[ "$COMMAND" == "apidiff" ]]; then
|
|
./gradlew jApiCmp
|
|
git add docs/apidiffs
|
|
if git diff --cached --quiet; then
|
|
gh pr comment $NUMBER --body "Already up-to-date"
|
|
exit 0 # success
|
|
fi
|
|
git commit -m "./gradlew jApiCmp"
|
|
git push
|
|
elif [[ "$COMMAND" == "update" ]]; then
|
|
# TODO check for up-to-date
|
|
git merge --no-edit origin/main
|
|
git push
|
|
elif [[ "$COMMAND" == "rerun" ]]; then
|
|
echo TODO
|
|
# gh run rerun --failed
|
|
elif [[ "$COMMAND" == "help" ]]; then
|
|
gh pr comment $NUMBER --body "$available_commands"
|
|
else
|
|
body="Unknown command: \`$COMMAND\`
|
|
|
|
$available_commands
|
|
"
|
|
gh pr comment $NUMBER --body "$body"
|
|
fi
|