Lombard PoR address #4496
This file contains 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: 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: ['ubuntu-latest'] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
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] | |
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
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] | |
if: needs.install-packages.outputs.changed-packages != '[]' | |
needs: | |
- check-changesets | |
- install-packages | |
steps: | |
- name: Check out code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- 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] | |
if: needs.install-packages.outputs.changed-packages != '[]' | |
needs: | |
- check-changesets | |
- install-packages | |
steps: | |
- name: Check out code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- 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] | |
needs: | |
- check-changesets | |
- install-packages | |
steps: | |
- name: Check out code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- 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] | |
if: needs.install-packages.outputs.changed-packages != '[]' | |
needs: | |
- check-changesets | |
- install-packages | |
env: | |
METRICS_ENABLED: false | |
steps: | |
- name: Check out code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
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] | |
if: needs.install-packages.outputs.changed-packages != '[]' | |
needs: | |
- check-changesets | |
- install-packages | |
steps: | |
- name: Check out code | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- 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 |