Fetch Contracts #76
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 extract-meta | |
| run: > | |
| cargo run --locked --release --manifest-path .scripts/extract-meta/Cargo.toml contracts/ meta/ | |
| - 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 add meta/ | |
| git add specs/ | |
| git commit -m "Update contracts from buckets" || echo "No changes to commit" | |
| git push |