name: Sims release/0.47.x
# Sims workflow runs multiple types of simulations (nondeterminism, import-export, after-import, multi-seed-short)
# This workflow will run on all Pull Requests, if a .go, .mod or .sum file have been changed
on:
  schedule:
    - cron: "0 0,12 * * *"
  release:
    types: [published]

concurrency:
  group: ci-${{ github.ref }}-sims-047
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, 'skip-sims')"
    steps:
      - uses: actions/checkout@v4
        with:
          ref: "release/v0.47.x"
      - uses: actions/setup-go@v5
        with:
          go-version: "1.23"
          check-latest: true
      - run: make build

  install-runsim:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/setup-go@v5
        with:
          go-version: "1.23"
          check-latest: true
      - name: Install runsim
        run: go install github.com/cosmos/tools/cmd/runsim@v1.0.0
      - uses: actions/cache@v4
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary

  test-sim-import-export:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v4
        with:
          ref: "release/v0.47.x"
      - uses: actions/setup-go@v5
        with:
          go-version: "1.23"
          check-latest: true
      - uses: actions/cache@v4
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
      - name: test-sim-import-export
        run: |
          make test-sim-import-export

  test-sim-after-import:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v4
        with:
          ref: "release/v0.47.x"
      - uses: actions/setup-go@v5
        with:
          go-version: "1.23"
          check-latest: true
      - uses: actions/cache@v4
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
      - name: test-sim-after-import
        run: |
          make test-sim-after-import

  test-sim-multi-seed-short:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v4
        with:
          ref: "release/v0.47.x"
      - uses: actions/setup-go@v5
        with:
          go-version: "1.23"
          check-latest: true
      - uses: actions/cache@v4
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
      - name: test-sim-multi-seed-short
        run: |
          make test-sim-multi-seed-short

  sims-notify-success:
    needs:
      [test-sim-multi-seed-short, test-sim-after-import, test-sim-import-export]
    runs-on: ubuntu-latest
    if: ${{ success() }}
    steps:
      - uses: actions/checkout@v4
      - name: Get previous workflow status
        uses: ./.github/actions/last-workflow-status
        id: last_status
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

      - name: Notify Slack on success
        if: ${{ steps.last_status.outputs.last_status == 'failure' }}
        uses: rtCamp/action-slack-notify@v2.3.3
        env:
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          SLACK_CHANNEL: sdk-sims
          SLACK_USERNAME: Sim Tests release/0.47.x
          SLACK_ICON_EMOJI: ":white_check_mark:"
          SLACK_COLOR: good
          SLACK_MESSAGE: 0.47.x Sims are passing
          SLACK_FOOTER: ""

  sims-notify-failure:
    permissions:
      contents: none
    needs:
      [test-sim-multi-seed-short, test-sim-after-import, test-sim-import-export]
    runs-on: ubuntu-latest
    if: ${{ failure() }}
    steps:
      - name: Notify Slack on failure
        uses: rtCamp/action-slack-notify@v2.3.3
        env:
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          SLACK_CHANNEL: sdk-sims
          SLACK_USERNAME: Sim Tests release/0.47.x
          SLACK_ICON_EMOJI: ":skull:"
          SLACK_COLOR: danger
          SLACK_MESSAGE: 0.47.x Sims are failing
          SLACK_FOOTER: ""
