Skip to content

Feature/df 19949

Feature/df 19949 #2261

Workflow file for this run

name: PR Checks
on:
pull_request:
branches:
- main
# The only commits that will contain changes to the masterlist will be releases
paths-ignore:
- MASTERLIST.md
env:
UPSTREAM_BRANCH: origin/${{ github.base_ref }}
concurrency:
group: pr-${{ github.event.pull_request.number }}-checks
cancel-in-progress: true
jobs:
# ---------- Initial steps ----------
# Check that the changes introduced in this PR include changesets for packages that would need them
check-changesets:
name: Adapter changes accompanied by a changeset
runs-on: [self-hosted, sdlc-ghr-prod]
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Check whether adapter change also has a changeset
id: adapter_change_has_changeset
run: ./.github/scripts/validate-changesets.sh
# Set up yarn and install dependencies, caching them to be reused across other steps in this workflow
install-packages:
name: Install and verify dependencies
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
outputs:
changed-packages: ${{ steps.changed-adapters.outputs.CHANGED_PACKAGES }}
adapter-list: ${{ steps.changed-adapters.outputs.CHANGED_ADAPTERS }}
steps:
- name: Check out code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up and install dependencies
uses: ./.github/actions/setup
with:
base-branch: origin/${{ github.base_ref }}
- name: Build list of changed packages and changed adapters
id: changed-adapters
run: ./.github/scripts/changed-adapters.sh
# ---------- Adapter checks (only for changed EAs) ----------
# Run unit tests
unit-tests:
name: Run unit tests for changed adapters
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
if: needs.install-packages.outputs.changed-packages != '[]'
needs:
- check-changesets
- install-packages
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Set up and install dependencies
uses: ./.github/actions/setup
- name: Run unit tests
env:
CHANGED_PACKAGES: ${{ needs.install-packages.outputs.changed-packages }}
run: METRICS_ENABLED=false yarn jest --passWithNoTests $(echo $CHANGED_PACKAGES | jq '.[].location + "/test/unit"' -r | tr '\n' ' ')
# Run integration tests
integration-tests:
name: Run integration tests for changed adapters
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
if: needs.install-packages.outputs.changed-packages != '[]'
needs:
- check-changesets
- install-packages
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Set up and install dependencies
uses: ./.github/actions/setup
- name: Run integration tests
env:
CHANGED_PACKAGES: ${{ needs.install-packages.outputs.changed-packages }}
run: EA_PORT=0 METRICS_ENABLED=false yarn jest --passWithNoTests $(echo $CHANGED_PACKAGES | jq '.[].location + "/test/integration"' -r | tr '\n' ' ')
# Run linters
linters:
name: Run linters and formatters
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
needs:
- check-changesets
- install-packages
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Set up and install dependencies
uses: ./.github/actions/setup
- name: Lint all files
run: yarn lint
- name: Check for formatting errors
run: yarn format:check
# Run documentation tests (check that the doc generation succeeds to avoid problems downstream)
run-documentation-check:
name: Documentation generation test
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
if: needs.install-packages.outputs.changed-packages != '[]'
needs:
- check-changesets
- install-packages
env:
METRICS_ENABLED: false
steps:
- name: Check out code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up and install dependencies
uses: ./.github/actions/setup
- name: Test Master List Generation
run: yarn generate:master-list -v
- name: Test README Generation
run: yarn generate:readme -v
# Run a script to check that modified v3 adapters have the latest framework version
ea-framework-version-check:
name: Check that changed adapters have the latest EA framework version
runs-on: [ubuntu-latest] # TODO change back to [self-hosted, sdlc-ghr-prod] runners after they are upgraded to support Node 22 libraries
if: needs.install-packages.outputs.changed-packages != '[]'
needs:
- check-changesets
- install-packages
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Set up and install dependencies
uses: ./.github/actions/setup
- name: Check for outdated ea-framework dependencies
env:
CHANGED_PACKAGES: ${{ needs.install-packages.outputs.changed-packages }}
run: |
changed_packages=$(echo $CHANGED_PACKAGES | jq '.[].location' -r | tr '\n' ' ')
dependency="@chainlink/external-adapter-framework"
v3_packages=()
outdated_packages=()
packages=$(find packages -name 'package.json')
latest_version=$(curl -sH "Accept: application/vnd.github.v3+json" "https://api.github.com/repos/smartcontractkit/ea-framework-js/contents/package.json" | jq -r '.content' | base64 -d | jq -r '.version')
# get the list of v3 EAs
for file in $(echo $packages); do
if jq -e ".dependencies[\"$dependency\"]" "$file" >/dev/null; then
v3_packages+=("$(dirname $file)")
fi
done
# check if changed code is part of any v3 EA
for changedFile in $changed_packages; do
for package in "${v3_packages[@]}"; do
if [[ "$changedFile" == "$package"* ]]; then
# found change in v3 EA, comparing versions
local_version=$(jq -r ".dependencies[\"$dependency\"]" "$package/package.json")
if [ "$local_version" != "$latest_version" ] && ! grep -q "^$package$" <<< "${outdated_packages[@]}"; then
outdated_packages+=("$package")
fi
fi
done
done
# print and error if there are outdated adapters
if [ ${#outdated_packages[@]} -gt 0 ]; then
echo "The following packages have an outdated \"$dependency\" dependency:"
for file in "${outdated_packages[@]}"; do
echo "- $file"
done
exit 1
fi