Fetch Contracts #67
This file contains hidden or 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: Fetch Contracts | |
| on: | |
| push: | |
| branches: [ main ] | |
| schedule: | |
| - cron: '0 0 * * *' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| jobs: | |
| list-buckets: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| bucket0: ${{ steps.list-buckets.outputs.bucket0 }} | |
| bucket1: ${{ steps.list-buckets.outputs.bucket1 }} | |
| bucket2: ${{ steps.list-buckets.outputs.bucket2 }} | |
| bucket3: ${{ steps.list-buckets.outputs.bucket3 }} | |
| bucket4: ${{ steps.list-buckets.outputs.bucket4 }} | |
| bucket5: ${{ steps.list-buckets.outputs.bucket5 }} | |
| bucket6: ${{ steps.list-buckets.outputs.bucket6 }} | |
| bucket7: ${{ steps.list-buckets.outputs.bucket7 }} | |
| bucket8: ${{ steps.list-buckets.outputs.bucket8 }} | |
| bucket9: ${{ steps.list-buckets.outputs.bucket9 }} | |
| bucket10: ${{ steps.list-buckets.outputs.bucket10 }} | |
| bucket11: ${{ steps.list-buckets.outputs.bucket11 }} | |
| bucket12: ${{ steps.list-buckets.outputs.bucket12 }} | |
| bucket13: ${{ steps.list-buckets.outputs.bucket13 }} | |
| bucket14: ${{ steps.list-buckets.outputs.bucket14 }} | |
| bucket15: ${{ steps.list-buckets.outputs.bucket15 }} | |
| bucket16: ${{ steps.list-buckets.outputs.bucket16 }} | |
| bucket17: ${{ steps.list-buckets.outputs.bucket17 }} | |
| bucket18: ${{ steps.list-buckets.outputs.bucket18 }} | |
| bucket19: ${{ steps.list-buckets.outputs.bucket19 }} | |
| bucket20: ${{ steps.list-buckets.outputs.bucket20 }} | |
| bucket21: ${{ steps.list-buckets.outputs.bucket21 }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: rustup upgrade | |
| - uses: stellar/actions/rust-cache@main | |
| - name: Check list-buckets | |
| run: cargo check --locked --release --manifest-path .scripts/list-buckets/Cargo.toml | |
| - name: Run list-buckets | |
| id: list-buckets | |
| run: | | |
| BUCKETS=$(cargo run --locked --release --manifest-path .scripts/list-buckets/Cargo.toml) | |
| echo "Buckets: $BUCKETS" | |
| i=0 | |
| while IFS= read -r line; do | |
| if [ -n "$line" ] && [ $i -lt 22 ]; then | |
| echo "bucket$i=$line" >> "$GITHUB_OUTPUT" | |
| i=$((i+1)) | |
| fi | |
| done <<< "$BUCKETS" | |
| get-contracts: | |
| runs-on: ubuntu-latest | |
| needs: list-buckets | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - run: rustup upgrade | |
| - uses: stellar/actions/rust-cache@main | |
| - name: Restore cached bucket0 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket0 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket0 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket0 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket0 }}- | |
| - name: Restore cached bucket1 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket1 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket1 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket1 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket1 }}- | |
| - name: Restore cached bucket2 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket2 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket2 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket2 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket2 }}- | |
| - name: Restore cached bucket3 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket3 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket3 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket3 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket3 }}- | |
| - name: Restore cached bucket4 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket4 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket4 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket4 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket4 }}- | |
| - name: Restore cached bucket5 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket5 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket5 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket5 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket5 }}- | |
| - name: Restore cached bucket6 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket6 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket6 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket6 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket6 }}- | |
| - name: Restore cached bucket7 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket7 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket7 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket7 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket7 }}- | |
| - name: Restore cached bucket8 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket8 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket8 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket8 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket8 }}- | |
| - name: Restore cached bucket9 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket9 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket9 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket9 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket9 }}- | |
| - name: Restore cached bucket10 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket10 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket10 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket10 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket10 }}- | |
| - name: Restore cached bucket11 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket11 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket11 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket11 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket11 }}- | |
| - name: Restore cached bucket12 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket12 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket12 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket12 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket12 }}- | |
| - name: Restore cached bucket13 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket13 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket13 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket13 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket13 }}- | |
| - name: Restore cached bucket14 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket14 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket14 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket14 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket14 }}- | |
| - name: Restore cached bucket15 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket15 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket15 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket15 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket15 }}- | |
| - name: Restore cached bucket16 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket16 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket16 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket16 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket16 }}- | |
| - name: Restore cached bucket17 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket17 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket17 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket17 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket17 }}- | |
| - name: Restore cached bucket18 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket18 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket18 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket18 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket18 }}- | |
| - name: Restore cached bucket19 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket19 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket19 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket19 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket19 }}- | |
| - name: Restore cached bucket20 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket20 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket20 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket20 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket20 }}- | |
| - name: Restore cached bucket21 | |
| uses: actions/cache@v4 | |
| if: ${{ needs.list-buckets.outputs.bucket21 != '' }} | |
| with: | |
| path: cache/bucket-${{ needs.list-buckets.outputs.bucket21 }}.xdr | |
| key: bucket-${{ needs.list-buckets.outputs.bucket21 }} | |
| restore-keys: | | |
| bucket-${{ needs.list-buckets.outputs.bucket21 }}- | |
| - name: Run get-contracts-from-buckets | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/get-contracts-from-buckets/Cargo.toml -- | |
| ${{ needs.list-buckets.outputs.bucket0 }} | |
| ${{ needs.list-buckets.outputs.bucket1 }} | |
| ${{ needs.list-buckets.outputs.bucket2 }} | |
| ${{ needs.list-buckets.outputs.bucket3 }} | |
| ${{ needs.list-buckets.outputs.bucket4 }} | |
| ${{ needs.list-buckets.outputs.bucket5 }} | |
| ${{ needs.list-buckets.outputs.bucket6 }} | |
| ${{ needs.list-buckets.outputs.bucket7 }} | |
| ${{ needs.list-buckets.outputs.bucket8 }} | |
| ${{ needs.list-buckets.outputs.bucket9 }} | |
| ${{ needs.list-buckets.outputs.bucket10 }} | |
| ${{ needs.list-buckets.outputs.bucket11 }} | |
| ${{ needs.list-buckets.outputs.bucket12 }} | |
| ${{ needs.list-buckets.outputs.bucket13 }} | |
| ${{ needs.list-buckets.outputs.bucket14 }} | |
| ${{ needs.list-buckets.outputs.bucket15 }} | |
| ${{ needs.list-buckets.outputs.bucket16 }} | |
| ${{ needs.list-buckets.outputs.bucket17 }} | |
| ${{ needs.list-buckets.outputs.bucket18 }} | |
| ${{ needs.list-buckets.outputs.bucket19 }} | |
| ${{ needs.list-buckets.outputs.bucket20 }} | |
| ${{ needs.list-buckets.outputs.bucket21 }} | |
| - name: Run extract-specs | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/extract-specs/Cargo.toml contracts/ specs/ | |
| - name: Run spec-analysis | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/spec-analysis/Cargo.toml contracts/ > analysis/spec.csv | |
| - name: Run dupe-code-analysis | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/dupe-code-analysis/Cargo.toml contracts/ > analysis/dupe-code.csv | |
| - name: Run dupe-section-analysis | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/dupe-section-analysis/Cargo.toml contracts/ > analysis/dupe-sections.csv | |
| - name: Run dupe-spec-analysis | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/dupe-specs-analysis/Cargo.toml contracts/ > analysis/dupe-specs.csv | |
| - name: Commit contracts | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| git add analysis/ | |
| git add contracts/ | |
| git commit -m "Update contracts from buckets" || echo "No changes to commit" | |
| git push |