publish metric for nightly build outcome #1
This file contains hidden or 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: Nightly Upstream Snapshot Build | |
| on: | |
| schedule: | |
| - cron: "21 3 * * *" | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - zhaez/nightly-build | |
| env: | |
| AWS_DEFAULT_REGION: us-east-1 | |
| BRANCH_NAME: nightly-dependency-updates | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| id-token: write | |
| jobs: | |
| update-and-create-pr: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| has_changes: ${{ steps.check_changes.outputs.has_changes }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 #v5.0.0 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Set up Node.js | |
| uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 #v5.0.0 | |
| with: | |
| node-version: '18' | |
| - name: Check for breaking changes | |
| id: breaking_changes | |
| run: node scripts/find_breaking_changes.js | |
| - name: Configure git and create branch | |
| run: | | |
| git config --local user.email "[email protected]" | |
| git config --local user.name "GitHub Action" | |
| - name: Check out dependency update branch | |
| run: | | |
| if git ls-remote --exit-code --heads origin "$BRANCH_NAME"; then | |
| echo "Branch $BRANCH_NAME already exists, checking out..." | |
| git checkout "$BRANCH_NAME" | |
| else | |
| echo "Branch $BRANCH_NAME does not exist, creating new branch..." | |
| git checkout -b "$BRANCH_NAME" | |
| fi | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Update dependencies | |
| run: node scripts/update_dependencies.js | |
| - name: Check for changes and commit | |
| id: check_changes | |
| run: | | |
| if git diff --quiet; then | |
| echo "No dependency updates needed" | |
| echo "has_changes=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "Dependencies were updated" | |
| echo "has_changes=true" >> $GITHUB_OUTPUT | |
| git add aws-distro-opentelemetry-node-autoinstrumentation/package.json | |
| git commit -m "chore: update OpenTelemetry dependencies to latest versions" | |
| git push origin "$BRANCH_NAME" | |
| fi | |
| - name: Create or update PR | |
| if: steps.check_changes.outputs.has_changes == 'true' | |
| run: | | |
| PR_BODY="Automated update of OpenTelemetry dependencies to their latest available versions. | |
| **Upstream releases with breaking changes:** | |
| ${{ steps.breaking_changes.outputs.breaking_changes_info }}" | |
| if gh pr view "$BRANCH_NAME" --json state --jq '.state' 2>/dev/null | grep -q "OPEN"; then | |
| echo "Open PR already exists, updating description..." | |
| gh pr edit "$BRANCH_NAME" --body "$PR_BODY" | |
| else | |
| echo "Creating new PR..." | |
| gh pr create \ | |
| --title "Nightly dependency update: OpenTelemetry packages to latest versions" \ | |
| --body "$PR_BODY" \ | |
| --base main \ | |
| --head "$BRANCH_NAME" | |
| fi | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-and-test: | |
| needs: update-and-create-pr | |
| if: needs.update-and-create-pr.outputs.has_changes == 'true' | |
| uses: ./.github/workflows/main-build.yml | |
| secrets: inherit | |
| permissions: | |
| id-token: write | |
| contents: read | |
| with: | |
| ref: nightly-dependency-updates | |
| publish-nightly-build-status: | |
| name: "Publish Nightly Build Status" | |
| needs: [update-and-create-pr, build-and-test] | |
| runs-on: ubuntu-latest | |
| if: always() | |
| steps: | |
| - name: Configure AWS Credentials for emitting metrics | |
| uses: aws-actions/configure-aws-credentials@a03048d87541d1d9fcf2ecf528a4a65ba9bd7838 #v5.0.0 | |
| with: | |
| role-to-assume: ${{ secrets.MONITORING_ROLE_ARN }} | |
| aws-region: ${{ env.AWS_DEFAULT_REGION}} | |
| - name: Publish nightly build status | |
| run: | | |
| if [[ "${{ needs.build-and-test.result }}" == "skipped" ]]; then | |
| echo "Build was skipped (no changes), not publishing metric" | |
| else | |
| value="${{ needs.build-and-test.result == 'success' && '0.0' || '1.0'}}" | |
| aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ | |
| --metric-name Failure \ | |
| --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=nightly_build \ | |
| --value $value | |
| fi |