From cd96edbfafbcd6d63aaa5c95434593d2438d0252 Mon Sep 17 00:00:00 2001 From: penDerGraft Date: Fri, 13 Feb 2026 15:40:30 -0600 Subject: [PATCH 1/4] publish packages to contrafactory --- .github/workflows/publish.yml | 74 +++++++++++++++++++++++++++++++++++ contrafactory.toml | 1 + 2 files changed, 75 insertions(+) create mode 100644 .github/workflows/publish.yml create mode 100644 contrafactory.toml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..e9a53834 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,74 @@ +# Example GitHub Actions workflow for publishing Foundry contracts to Contrafactory. +# +# Copy this file to .github/workflows/publish.yml in your Foundry project. +# +# Required repository secrets: +# CONTRAFACTORY_API_KEY - API key for the Contrafactory registry +# +# Optional repository variables: +# CONTRAFACTORY_SERVER - Registry URL (defaults to https://contrafactory.prod.predicate.ninja) + +name: Publish Contracts + +on: + push: + tags: + - 'v*' + +jobs: + publish: + name: Build & Publish + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive # Foundry dependencies use git submodules + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Build contracts + run: forge build --build-info --sizes + + - name: Run tests + run: forge test -vvv + + - name: Install Contrafactory CLI + run: | + VERSION=${CONTRAFACTORY_CLI_VERSION:-latest} + if [ "$VERSION" = "latest" ]; then + DOWNLOAD_URL=$(curl -s https://api.github.com/repos/pendergraft/contrafactory/releases/latest \ + | jq -r '.assets[] | select(.name | test("linux-amd64$")) | .browser_download_url') + else + DOWNLOAD_URL="https://github.com/pendergraft/contrafactory/releases/download/${VERSION}/contrafactory-linux-amd64" + fi + curl -sL "$DOWNLOAD_URL" -o /usr/local/bin/contrafactory + chmod +x /usr/local/bin/contrafactory + contrafactory --version + + - name: Extract version from tag + id: version + run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + + - name: Publish (dry run) + env: + CONTRAFACTORY_SERVER: ${{ vars.CONTRAFACTORY_SERVER }} + CONTRAFACTORY_API_KEY: ${{ secrets.CONTRAFACTORY_API_KEY }} + run: contrafactory publish --version ${{ steps.version.outputs.version }} --dry-run + + - name: Publish + env: + CONTRAFACTORY_SERVER: ${{ vars.CONTRAFACTORY_SERVER }} + CONTRAFACTORY_API_KEY: ${{ secrets.CONTRAFACTORY_API_KEY }} + run: | + OUTPUT=$(contrafactory publish --version ${{ steps.version.outputs.version }} 2>&1) || true + echo "$OUTPUT" + # Fail on real errors, but not if every failure is VERSION_EXISTS + if echo "$OUTPUT" | grep -q "failed"; then + NON_EXISTS_FAILURES=$(echo "$OUTPUT" | grep "^ X" | grep -v "VERSION_EXISTS" || true) + if [ -n "$NON_EXISTS_FAILURES" ]; then + echo "::error::Publish failed with errors other than VERSION_EXISTS" + exit 1 + fi + echo "::warning::All packages already published at this version — skipping." + fi diff --git a/contrafactory.toml b/contrafactory.toml new file mode 100644 index 00000000..1fc941b8 --- /dev/null +++ b/contrafactory.toml @@ -0,0 +1 @@ +include_dependencies = ["TransparentUpgradeableProxy", "ProxyAdmin"] From fe0b29a093d3c0f248ad701cf97478425565c7b6 Mon Sep 17 00:00:00 2001 From: penDerGraft Date: Fri, 13 Feb 2026 15:41:24 -0600 Subject: [PATCH 2/4] remove comments on publish workflow --- .github/workflows/publish.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e9a53834..0fff3716 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,13 +1,3 @@ -# Example GitHub Actions workflow for publishing Foundry contracts to Contrafactory. -# -# Copy this file to .github/workflows/publish.yml in your Foundry project. -# -# Required repository secrets: -# CONTRAFACTORY_API_KEY - API key for the Contrafactory registry -# -# Optional repository variables: -# CONTRAFACTORY_SERVER - Registry URL (defaults to https://contrafactory.prod.predicate.ninja) - name: Publish Contracts on: From aacd8546df6eb9aa5e5ccddc73ebc43f1a033d35 Mon Sep 17 00:00:00 2001 From: penDerGraft Date: Fri, 13 Feb 2026 15:44:34 -0600 Subject: [PATCH 3/4] add workflow dispatch trigger --- .github/workflows/publish.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0fff3716..408f7ea8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,6 +4,12 @@ on: push: tags: - 'v*' + workflow_dispatch: + inputs: + version: + description: 'Version to publish (e.g. 1.0.0 or 1.0.0-prerelease)' + required: true + type: string jobs: publish: @@ -36,9 +42,14 @@ jobs: chmod +x /usr/local/bin/contrafactory contrafactory --version - - name: Extract version from tag + - name: Determine version id: version - run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT + else + echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + fi - name: Publish (dry run) env: From 02621f1dcb124f198ca709776a33349e16e85391 Mon Sep 17 00:00:00 2001 From: penDerGraft Date: Fri, 13 Feb 2026 16:04:47 -0600 Subject: [PATCH 4/4] use github action for binary install --- .github/workflows/publish.yml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 408f7ea8..25cbf6af 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -30,17 +30,12 @@ jobs: run: forge test -vvv - name: Install Contrafactory CLI - run: | - VERSION=${CONTRAFACTORY_CLI_VERSION:-latest} - if [ "$VERSION" = "latest" ]; then - DOWNLOAD_URL=$(curl -s https://api.github.com/repos/pendergraft/contrafactory/releases/latest \ - | jq -r '.assets[] | select(.name | test("linux-amd64$")) | .browser_download_url') - else - DOWNLOAD_URL="https://github.com/pendergraft/contrafactory/releases/download/${VERSION}/contrafactory-linux-amd64" - fi - curl -sL "$DOWNLOAD_URL" -o /usr/local/bin/contrafactory - chmod +x /usr/local/bin/contrafactory - contrafactory --version + uses: jaxxstorm/action-install-gh-release@v2.1.0 + with: + repo: pendergraft/contrafactory + extension-matching: disable + rename-to: contrafactory + chmod: 0755 - name: Determine version id: version