add replay #89184
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: Solidity | |
on: | |
merge_group: | |
push: | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
readonly_changes: | |
name: Detect readonly solidity file changes | |
runs-on: ubuntu-latest | |
outputs: | |
changes: ${{ steps.ch.outputs.changes }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Detect readonly solidity file changes | |
id: ch | |
uses: ./.github/actions/detect-solidity-readonly-file-changes | |
changes: | |
name: Detect changes | |
runs-on: ubuntu-latest | |
outputs: | |
changes: ${{ steps.ch.outputs.changes }} | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Detect changes | |
id: ch | |
uses: ./.github/actions/detect-solidity-file-changes | |
tag-check: | |
needs: [changes] | |
name: Tag Check | |
runs-on: ubuntu-latest | |
outputs: | |
is-release: ${{ steps.release-tag-check.outputs.is-release }} | |
is-pre-release: ${{ steps.release-tag-check.outputs.is-pre-release }} | |
release-version: ${{ steps.release-tag-check.outputs.release-version }} | |
pre-release-version: ${{ steps.release-tag-check.outputs.pre-release-version }} | |
steps: | |
- uses: actions/[email protected] | |
- name: Check release tag | |
id: release-tag-check | |
uses: smartcontractkit/chainlink-github-actions/release/release-tag-check@5dd916d08c03cb5f9a97304f4f174820421bb946 # v2.3.11 | |
env: | |
# Match semver git tags with a "contracts-" prefix. | |
RELEASE_REGEX: '^contracts-v[0-9]+\.[0-9]+\.[0-9]+$' | |
PRE_RELEASE_REGEX: '^contracts-v[0-9]+\.[0-9]+\.[0-9]+-(.+)$' | |
# Get the version by stripping the "contracts-v" prefix. | |
VERSION_PREFIX: 'contracts-v' | |
prepublish-test: | |
needs: [changes, tag-check] | |
if: needs.changes.outputs.changes == 'true' || needs.tag-check.outputs.is-pre-release == 'true' | |
name: Prepublish Test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Setup NodeJS | |
uses: ./.github/actions/setup-nodejs | |
- name: Run Prepublish test | |
working-directory: contracts | |
run: pnpm prepublishOnly | |
native-compile: | |
needs: [changes, tag-check] | |
if: needs.changes.outputs.changes == 'true' || needs.tag-check.outputs.is-release == 'true' || needs.tag-check.outputs.is-pre-release == 'true' | |
name: Native Compilation | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
with: | |
path: chainlink | |
- name: Checkout diff-so-fancy | |
uses: actions/[email protected] | |
with: | |
repository: so-fancy/diff-so-fancy | |
ref: a673cb4d2707f64d92b86498a2f5f71c8e2643d5 # v1.4.3 | |
path: diff-so-fancy | |
- name: Install diff-so-fancy | |
run: echo "$GITHUB_WORKSPACE/diff-so-fancy" >> $GITHUB_PATH | |
- name: Setup NodeJS | |
uses: ./chainlink/.github/actions/setup-nodejs | |
with: | |
base-path: "chainlink" | |
prod: "true" | |
- name: Setup Go | |
uses: ./chainlink/.github/actions/setup-go | |
with: | |
go-version-file: "chainlink/go.mod" | |
- name: Run native compile and generate wrappers | |
working-directory: ./chainlink/contracts | |
run: make wrappers-all | |
- name: Verify local solc binaries | |
working-directory: chainlink | |
run: ./tools/ci/check_solc_hashes | |
- name: Check if Go solidity wrappers are updated | |
if: ${{ needs.changes.outputs.changes == 'true' }} | |
working-directory: chainlink | |
run: | | |
git add --all | |
git diff --minimal --color --cached --exit-code | diff-so-fancy | |
# The if statements for steps after checkout repo is a workaround for | |
# passing required check for PRs that don't have filtered changes. | |
lint: | |
defaults: | |
run: | |
working-directory: contracts | |
needs: [changes] | |
if: needs.changes.outputs.changes == 'true' | |
name: Solidity Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Setup NodeJS | |
uses: ./.github/actions/setup-nodejs | |
- name: Run pnpm lint | |
run: pnpm lint | |
- name: Run solhint | |
run: pnpm solhint | |
- name: Run solhint on tests | |
run: pnpm solhint-test | |
prettier: | |
defaults: | |
run: | |
working-directory: contracts | |
needs: [changes] | |
if: needs.changes.outputs.changes == 'true' | |
name: Prettier Formatting | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Setup NodeJS | |
uses: ./.github/actions/setup-nodejs | |
- name: Run prettier check | |
run: pnpm prettier:check | |
publish-beta: | |
name: Publish Beta NPM | |
environment: publish-contracts | |
needs: [tag-check, changes, lint, prettier, native-compile, prepublish-test] | |
if: needs.tag-check.outputs.is-pre-release == 'true' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Setup NodeJS | |
uses: ./.github/actions/setup-nodejs | |
- name: Version package.json | |
working-directory: contracts | |
run: | | |
echo "Bumping version to ${{ needs.tag-check.outputs.pre-release-version }}" | |
pnpm version ${{ needs.tag-check.outputs.pre-release-version }} --no-git-tag-version --no-commit-hooks --no-git-checks | |
- name: Publish to NPM (beta) | |
uses: smartcontractkit/.github/actions/ci-publish-npm@4b0ab756abcb1760cb82e1e87b94ff431905bffc # [email protected] | |
with: | |
npm-token: ${{ secrets.NPM_TOKEN }} | |
create-github-release: false | |
publish-command: "pnpm publish-beta --no-git-checks" | |
package-json-directory: contracts | |
publish-prod: | |
name: Publish Prod NPM | |
environment: publish-contracts | |
needs: [tag-check, changes, lint, prettier, native-compile, prepublish-test] | |
if: needs.tag-check.outputs.is-release == 'true' | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout the repo | |
uses: actions/[email protected] | |
- name: Setup NodeJS | |
uses: ./.github/actions/setup-nodejs | |
- name: Validate version | |
working-directory: contracts | |
run: | | |
PACKAGE_JSON_VERSION="$(cat package.json | jq -r '.version')" | |
if [ "$PACKAGE_JSON_VERSION" != "${{ needs.tag-check.outputs.release-version }}" ]; then | |
echo "::error version mismatch: package.json version ($PACKAGE_JSON_VERSION) does not match version computed from tag ${{ needs.tag-check.outputs.release-version }}" | |
exit 1 | |
fi | |
- name: Publish to NPM (latest) | |
uses: smartcontractkit/.github/actions/ci-publish-npm@4b0ab756abcb1760cb82e1e87b94ff431905bffc # [email protected] | |
with: | |
npm-token: ${{ secrets.NPM_TOKEN }} | |
create-github-release: false | |
publish-command: "pnpm publish-prod --no-git-checks" | |
package-json-directory: contracts |