diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 73001ccce..4a32e71d1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,9 +6,110 @@ on: # todo: change this branch name - master +env: + BOT_NAME: nr-opensource-bot + BOT_EMAIL: opensource+bot@newrelic.com + jobs: + checkout-and-build: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Cache node_modules + id: cache-node + uses: actions/cache@v2 + env: + cache-name: node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}- + + - name: Install dependencies + run: npm ci + + - name: Gatsby Build + run: npm run build:production + + generate-third-party-notices: + runs-on: ubuntu-latest + needs: checkout-and-build + steps: + # Checkout fetch-depth: 2 because there's a check to see if package.json + # was updated, and need at least 2 commits for the check to function properly + - name: Checkout repo + uses: actions/checkout@v2 + with: + fetch-depth: 2 + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Download Cached Deps + id: cache-node-modules + uses: actions/cache@v1 + env: + cache-name: node-modules + with: + path: ~/.npm + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}- + + - name: Install Dependencies + run: npm ci + + - name: Install OSS CLI + run: | + npm install -g @newrelic/newrelic-oss-cli + + - name: Generate Third Party Notices + id: generate-notices + run: | + if [ ! -f "third_party_manifest.json" ]; then + echo "::error::third_party_manifest.json is missing. Must generate using the newrelic-oss-cli." + exit 1 + fi + + # latest commit + LATEST_COMMIT=$(git rev-parse HEAD) + + # latest commit where package.json was changed + LAST_CHANGED_COMMIT=$(git log -1 --format=format:%H --full-diff package.json) + + if [ $LAST_CHANGED_COMMIT = $LATEST_COMMIT ]; then + git config user.email "${{ env.BOT_EMAIL }}" + git config user.name "${{ env.BOT_NAME }}" + oss third-party manifest + oss third-party notices + git add third_party_manifest.json + git add THIRD_PARTY_NOTICES.md + git commit -m 'chore: update third-party manifest and notices [skip-cd]' + echo "::set-output name=commit::true" + else + echo "No change in package.json, not regenerating third-party notices" + fi + + - name: Push Commit + if: steps.generate-notices.outputs.commit == 'true' + uses: ad-m/github-push-action@v0.6.0 + with: + github_token: ${{ secrets.OPENSOURCE_BOT_TOKEN }} + branch: master + generate-changelog: runs-on: ubuntu-latest + needs: [checkout-and-build, generate-third-party-notices] steps: - name: Checkout Repository uses: actions/checkout@v2 @@ -38,9 +139,9 @@ jobs: env: # Use nr-opensource-bot for authoring commits done by # semantic-release (rather than using @semantic-release-bot) - GIT_AUTHOR_NAME: "nr-opensource-bot" - GIT_AUTHOR_EMAIL: "opensource+bot@newrelic.com" - GIT_COMMITTER_NAME: "nr-opensource-bot" - GIT_COMMITTER_EMAIL: "opensource+bot@newrelic.com" + GIT_AUTHOR_NAME: ${{ env.BOT_NAME }} + GIT_AUTHOR_EMAIL: ${{ env.BOT_EMAIL }} + GIT_COMMITTER_NAME: ${{ env.BOT_NAME }} + GIT_COMMITTER_EMAIL: ${{ env.BOT_EMAIL }} GITHUB_TOKEN: ${{ secrets.OPENSOURCE_BOT_TOKEN }} run: npx semantic-release