diff --git a/.github/workflows/detect-breaking-changes-build.yml b/.github/workflows/detect-breaking-changes-build.yml index 33e9f66519b..c6ceb52d9dd 100644 --- a/.github/workflows/detect-breaking-changes-build.yml +++ b/.github/workflows/detect-breaking-changes-build.yml @@ -3,27 +3,30 @@ 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' - - - 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}) + 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 +34,108 @@ 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: Zip built packages + run: zip -r ./pr_built_packages.zip ./packages/**/dist - - 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 + - name: Upload build output as artifact uses: actions/upload-artifact@v2 with: - name: levitate - path: levitate/ + 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: Exit - run: exit ${{ steps.breaking-changes.outputs.is_breaking }} - shell: bash + - name: Install dependencies + run: yarn install --immutable + + - name: Build packages + run: yarn packages:build + + - name: Zip built packages + run: zip -r ./main_built_packages.zip ./packages/**/dist + + - name: Upload build output as artifact + uses: actions/upload-artifact@v2 + with: + 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: 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 diff --git a/scripts/check-breaking-changes.sh b/scripts/check-breaking-changes.sh index 896c350f1d9..a76e3a2626b 100755 --- a/scripts/check-breaking-changes.sh +++ b/scripts/check-breaking-changes.sh @@ -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))
" - fi + GITHUB_MESSAGE="${GITHUB_MESSAGE}**\\\`${PACKAGE_PATH}\\\`** has possible breaking changes ([more info](${GITHUB_JOB_LINK}#step:${GITHUB_STEP_NUMBER}:1))
" + fi done <<< "$PACKAGES"