Skip to content

Fetch Contracts

Fetch Contracts #76

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