diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml new file mode 100644 index 0000000..af53672 --- /dev/null +++ b/.github/actions/setup/action.yml @@ -0,0 +1,34 @@ +name: Install Yarn dependencies +description: Installs the workspace's yarn dependencies and caches them +inputs: + project: + description: The project to install dependencies for + required: true + version: + description: The version of the project to install dependencies for + required: true + +runs: + using: composite + steps: + - name: Enable Corepack before setting up Node + run: corepack enable + shell: bash + + - uses: actions/setup-node@v4 + with: + node-version-file: '${{ inputs.project }}/package.json' + cache: 'yarn' + + - name: Install + run: yarn --immutable + shell: bash + + - name: Install Nargo + uses: noir-lang/noirup@v0.1.2 + with: + toolchain: ${{ inputs.version }} + + - name: Use Nargo + run: nargo --version + shell: bash diff --git a/.github/scripts/latest.js b/.github/scripts/latest.js new file mode 100644 index 0000000..3052b74 --- /dev/null +++ b/.github/scripts/latest.js @@ -0,0 +1,27 @@ +const { writeFileSync } = require('fs'); + +async function main() { + const fetchOpts = { + headers: {}, + }; + + if (process.env.GITHUB_TOKEN) + fetchOpts.headers = { Authorization: `token ${process.env.GITHUB_TOKEN}` }; + + const res = await fetch('https://api.github.com/repos/noir-lang/noir/releases', fetchOpts); + + const data = await res.json(); + + const filtered = data.filter( + release => !release.tag_name.includes('aztec') && !release.tag_name.includes('nightly'), + ); + + const latestStable = filtered.find(release => !release.prerelease).tag_name; + const latestPreRelease = filtered.find(release => release.prerelease).tag_name; + + // TODO: add the prerelease to this object! + const workflowOutput = JSON.stringify({ stable: latestStable }); + console.log(workflowOutput); // DON'T REMOVE, GITHUB WILL CAPTURE THIS OUTPUT +} + +main(); diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml new file mode 100644 index 0000000..456e51e --- /dev/null +++ b/.github/workflows/nightly.yaml @@ -0,0 +1,73 @@ +name: Nightly drift test + +on: + # Giving ourselves a way to trigger this manually + workflow_dispatch: + schedule: + # Run a nightly release at 2 AM UTC + - cron: '0 2 * * *' + +jobs: + setup: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + + - name: Get versions to test for drift + id: versions_step + run: | + output=$(node ./.github/scripts/latest.js) + echo "Output from Node.js script: $output" + echo "::set-output name=versionArray::$output" + + - name: Set Up Matrix + id: set-matrix + run: | + VERSIONS='${{ steps.versions_step.outputs.versionArray }}' + echo "Versions for Matrix: $VERSIONS" + MATRIX=$(echo "$VERSIONS" | jq -c '{versions: .} | .versions | to_entries | map({key: .key, value: (.value | sub("^v"; ""))})') + echo "::set-output name=matrix::{\"include\":$MATRIX}" + + test-drift-vite-hardhat: + needs: setup + runs-on: ubuntu-latest + defaults: + run: + working-directory: vite-hardhat + strategy: + matrix: ${{fromJson(needs.setup.outputs.matrix)}} + steps: + - uses: actions/checkout@v4 + + - name: Set up test environment + uses: ./.github/actions/setup + with: + project: vite-hardhat + version: ${{ matrix.value }} + + - name: Install test version + run: | + yarn add \ + @noir-lang/noir_js@${{ matrix.value }} \ + @noir-lang/backend_barretenberg@${{ matrix.value }} \ + @noir-lang/noir_wasm@${{ matrix.value }} \ + @noir-lang/types@${{ matrix.value }} + + - name: 'Create env file' + run: | + touch .env + echo SEPOLIA_ALCHEMY_KEY="${{ secrets.SEPOLIA_ALCHEMY_KEY }}" >> .env + echo SEPOLIA_DEPLOYER_PRIVATE_KEY="${{ secrets.SEPOLIA_DEPLOYER_PRIVATE_KEY }}" >> .env + echo MUMBAI_ALCHEMY_KEY"=${{ secrets.MUMBAI_ALCHEMY_KEY }}" >> .env + echo MUMBAI_DEPLOYER_PRIVATE_KEY="${{ secrets.MUMBAI_DEPLOYER_PRIVATE_KEY }}" >> .env + + - name: Generate verifier contract + run: | + nargo codegen-verifier + working-directory: vite-hardhat/circuits + + - name: Run test + run: yarn test + continue-on-error: ${{ matrix.key == 'prerelease' }} diff --git a/.github/workflows/vite_hardhat.yaml b/.github/workflows/vite_hardhat.yaml new file mode 100644 index 0000000..5e2d19b --- /dev/null +++ b/.github/workflows/vite_hardhat.yaml @@ -0,0 +1,38 @@ +name: PR - vite-hardhat +on: + pull_request: + paths: + - 'vite-hardhat/**' + +jobs: + test-vite-hardhat: + runs-on: ubuntu-latest + defaults: + run: + working-directory: vite-hardhat + + steps: + - uses: actions/checkout@v4 + + - name: Enable Corepack before setting up Node + run: corepack enable + + - uses: actions/setup-node@v4 + with: + node-version: 20.10.0 + cache: 'yarn' + + - name: Install + run: yarn --immutable + shell: bash + + - name: 'Create env file' + run: | + touch .env + echo SEPOLIA_ALCHEMY_KEY="${{ secrets.SEPOLIA_ALCHEMY_KEY }}" >> .env + echo SEPOLIA_DEPLOYER_PRIVATE_KEY="${{ secrets.SEPOLIA_DEPLOYER_PRIVATE_KEY }}" >> .env + echo MUMBAI_ALCHEMY_KEY"=${{ secrets.MUMBAI_ALCHEMY_KEY }}" >> .env + echo MUMBAI_DEPLOYER_PRIVATE_KEY="${{ secrets.MUMBAI_DEPLOYER_PRIVATE_KEY }}" >> .env + + - name: Run test + run: yarn test diff --git a/.github/workflows/with_foundry.yaml b/.github/workflows/with_foundry.yaml index 4667899..355c6af 100644 --- a/.github/workflows/with_foundry.yaml +++ b/.github/workflows/with_foundry.yaml @@ -1,39 +1,37 @@ -# a github workflow that runs curl -L https://foundry.paradigm.xyz | bash then nargo codegen-verifier then nargo prove p - -name: Run Tests on PR +name: PR - with-foundry on: pull_request: paths: - 'with-foundry/**' jobs: - test: + test-with-foundry: defaults: run: working-directory: with-foundry runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v2 - - name: Install Nargo - uses: noir-lang/noirup@v0.1.2 - with: - toolchain: 0.11.0 + - name: Install Nargo + uses: noir-lang/noirup@v0.1.2 + with: + toolchain: 0.11.0 - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 - - name: Generate verifier contract - run: | - nargo codegen-verifier - working-directory: with-foundry/circuits + - name: Generate verifier contract + run: | + nargo codegen-verifier + working-directory: with-foundry/circuits - - name: Generate proof - run: | - nargo prove - working-directory: with-foundry/circuits + - name: Generate proof + run: | + nargo prove + working-directory: with-foundry/circuits - - name: Test with Foundry - run: | - forge test --optimize --optimizer-runs 5000 --evm-version london + - name: Test with Foundry + run: | + forge test --optimize --optimizer-runs 5000 --evm-version london diff --git a/.gitignore b/.gitignore index 0028c9f..972f3b5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ node_modules package-lock.json + +# To use with nektos/act +.github/event.json