CI: Update breaking changes workflow to compare against main (#44097)

* ci(breaking-changes): split into separate builds for pr and main

* ci(breaking-changes): add path for npm install steps

* ci(breaking-changes): fix up workflow, update bash script
pull/42674/head^2
Jack Westbrook 3 years ago committed by GitHub
parent 0a5771ee6b
commit 5b61273497
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 147
      .github/workflows/detect-breaking-changes-build.yml
  2. 27
      scripts/check-breaking-changes.sh

@ -3,27 +3,71 @@ name: Levitate / Detect breaking changes
on: pull_request
jobs:
build:
name: Detect
buildPR:
name: Build PR
runs-on: ubuntu-latest
env:
GITHUB_STEP_NUMBER: 7
defaults:
run:
working-directory: './pr'
steps:
- uses: actions/checkout@v2
with:
path: './pr'
- name: Setup environment
uses: actions/setup-node@v2.5.1
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- name: Restore yarn cache
uses: actions/cache@v2
id: yarn-cache
with:
node-version: '16'
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Install dependencies
run: yarn install --immutable
- name: Build packages
run: yarn packages:build
- name: Get link for the Github Action job
id: job
uses: actions/github-script@v5
- name: Zip built packages
run: zip -r ./pr_built_packages.zip ./packages/**/dist
- name: Upload build output as artifact
uses: actions/upload-artifact@v2
with:
script: |
const script = require('./.github/workflows/scripts/pr-get-job-link.js')
await script({github, context, core})
name: buildPr
path: './pr/pr_built_packages.zip'
buildMain:
name: Build Main
runs-on: ubuntu-latest
defaults:
run:
working-directory: './main'
steps:
- uses: actions/checkout@v2
with:
path: './main'
ref: 'main'
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)"
- name: Restore yarn cache
uses: actions/cache@v2
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }}
restore-keys: |
yarn-cache-folder-
- name: Install dependencies
run: yarn install --immutable
@ -31,24 +75,67 @@ jobs:
- name: Build packages
run: yarn packages:build
- name: Detect breaking changes
id: breaking-changes
run: ./scripts/check-breaking-changes.sh
env:
FORCE_COLOR: 3
GITHUB_JOB_LINK: ${{ steps.job.outputs.link }}
- name: Persisting the check output
run: |
mkdir -p ./levitate
echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\" }" > ./levitate/result.json
- name: Zip built packages
run: zip -r ./main_built_packages.zip ./packages/**/dist
- name: Upload check output as artifact
- name: Upload build output as artifact
uses: actions/upload-artifact@v2
with:
name: levitate
path: levitate/
name: buildMain
path: './main/main_built_packages.zip'
Detect:
name: Detect breaking changes
runs-on: ubuntu-latest
needs: ['buildPR', 'buildMain']
env:
GITHUB_STEP_NUMBER: 7
steps:
- uses: actions/checkout@v2
- name: Get built packages from pr
uses: actions/download-artifact@v2
with:
name: buildPr
- name: Get built packages from main
uses: actions/download-artifact@v2
with:
name: buildMain
- name: Exit
run: exit ${{ steps.breaking-changes.outputs.is_breaking }}
shell: bash
- name: Unzip artifact from pr
run: unzip pr_built_packages.zip -d ./pr && rm pr_built_packages.zip
- name: Unzip artifact from main
run: unzip main_built_packages.zip -d ./main && rm main_built_packages.zip
- name: Get link for the Github Action job
id: job
uses: actions/github-script@v5
with:
script: |
const script = require('./.github/workflows/scripts/pr-get-job-link.js')
await script({github, context, core})
- name: Detect breaking changes
id: breaking-changes
run: ./scripts/check-breaking-changes.sh
env:
FORCE_COLOR: 3
GITHUB_JOB_LINK: ${{ steps.job.outputs.link }}
- name: Persisting the check output
run: |
mkdir -p ./levitate
echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\" }" > ./levitate/result.json
- name: Upload check output as artifact
uses: actions/upload-artifact@v2
with:
name: levitate
path: levitate/
- name: Exit
run: exit ${{ steps.breaking-changes.outputs.is_breaking }}
shell: bash

@ -1,32 +1,29 @@
#!/usr/bin/env bash
# Find existing packages using Lerna
PACKAGES=$(lerna list -p -l)
# Find package directories
PACKAGES=$(ls -d ./packages/*/)
EXIT_CODE=0
GITHUB_MESSAGE=""
# Loop through the packages
while IFS= read -r line; do
while IFS=" " read -r -a package; do
# Read package info
IFS=':' read -ra ADDR <<< "$line"
PACKAGE_PATH="${ADDR[0]}"
PACKAGE_NAME="${ADDR[1]}"
# shellcheck disable=SC2128
PACKAGE_PATH=$(basename "$package")
# Calculate current and previous package paths / names
PREV="$PACKAGE_NAME@canary"
CURRENT="$PACKAGE_PATH/dist/"
PREV="./main/packages/$PACKAGE_PATH/dist/"
CURRENT="./pr/packages/$PACKAGE_PATH/dist/"
# Temporarily skipping @grafana/toolkit, as it doesn't have any exposed static typing
if [[ "$PACKAGE_NAME" == '@grafana/toolkit' ]]; then
# Temporarily skipping these packages as they don't have any exposed static typing
if [[ "$PACKAGE_PATH" == 'grafana-toolkit' || "$PACKAGE_PATH" == 'jaeger-ui-components' ]]; then
continue
fi
# Run the comparison and record the exit code
echo ""
echo ""
echo "${PACKAGE_NAME}"
echo "${PACKAGE_PATH}"
echo "================================================="
npm exec -- @grafana/levitate compare --prev "$PREV" --current "$CURRENT"
@ -39,8 +36,8 @@ while IFS= read -r line; do
if [ $STATUS -gt 0 ]
then
EXIT_CODE=1
GITHUB_MESSAGE="${GITHUB_MESSAGE}**\\\`${PACKAGE_NAME}\\\`** has possible breaking changes ([more info](${GITHUB_JOB_LINK}#step:${GITHUB_STEP_NUMBER}:1))<br />"
fi
GITHUB_MESSAGE="${GITHUB_MESSAGE}**\\\`${PACKAGE_PATH}\\\`** has possible breaking changes ([more info](${GITHUB_JOB_LINK}#step:${GITHUB_STEP_NUMBER}:1))<br />"
fi
done <<< "$PACKAGES"

Loading…
Cancel
Save