name: Update Artifacts

on:
  workflow_dispatch: # Allows manual triggering
  schedule:
    - cron: "0 0 * * 1" # weekly on Monday at 00:00 UTC

concurrency:
  group: ${{ github.ref }}-${{ github.workflow }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  check:
    name: Renew Artifacts
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      # We run this (up-to-date) node locally to fetch metadata from it for the artifacts
      - name: Use substrate and polkadot node binaries
        uses: ./.github/workflows/actions/use-nodes

      - name: Install Rust stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Rust Cache
        uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8

      # This starts a substrate node and runs a few subxt cli child processes to fetch metadata from it and generate code.
      # In particular it generates:
      # - 4 metadata (*.scale) files in the `artifacts` directory
      # - a polkadot.rs file from the full metadata that is checked in integration tests
      # - a polkadot.json in the `artifacts/demo_chain_specs` directory
      - name: Fetch Artifacts
        run: cargo run --bin artifacts

      - uses: actions/create-github-app-token@v2
        id: app-token
        with:
          app-id: ${{ secrets.SUBXT_PR_MAKER_APP_ID }}
          private-key: ${{ secrets.SUBXT_PR_MAKER_APP_KEY }}

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ steps.app-token.outputs.token }}
          base: master
          branch: update-artifacts
          commit-message: Update Artifacts (auto-generated)
          branch-suffix: timestamp
          title: Update Artifacts (auto-generated)
          body: |
            This PR updates the artifacts by fetching fresh metadata from a substrate node.
            It also recreates the polkadot.rs file used in the integration tests.
            It was created automatically by a Weekly GitHub Action Cronjob.
