name: Sims
# 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:
  pull_request:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, 'skip-sims')"
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - run: make build

  install-runsim:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - name: Install runsim
        run: export GO111MODULE="on" && go install github.com/cosmos/tools/cmd/runsim@v1.0.0
      - uses: actions/cache@v2.1.6
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary

  test-sim-nondeterminism:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - uses: technote-space/get-diff-action@v4
        with:
          PATTERNS: |
            **/**.go
            go.mod
            go.sum
      - uses: actions/cache@v2.1.6
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
        if: env.GIT_DIFF
      - name: test-sim-nondeterminism
        run: |
          make test-sim-nondeterminism
        if: env.GIT_DIFF

  test-sim-import-export:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - uses: technote-space/get-diff-action@v4
        with:
          SUFFIX_FILTER: |
            **/**.go
            go.mod
            go.sum
          SET_ENV_NAME_INSERTIONS: 1
          SET_ENV_NAME_LINES: 1
      - uses: actions/cache@v2.1.6
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
        if: env.GIT_DIFF
      - name: test-sim-import-export
        run: |
          make test-sim-import-export
        if: env.GIT_DIFF

  test-sim-after-import:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - uses: technote-space/get-diff-action@v4
        with:
          SUFFIX_FILTER: |
            **/**.go
            go.mod
            go.sum
          SET_ENV_NAME_INSERTIONS: 1
          SET_ENV_NAME_LINES: 1
      - uses: actions/cache@v2.1.6
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
        if: env.GIT_DIFF
      - name: test-sim-after-import
        run: |
          make test-sim-after-import
        if: env.GIT_DIFF

  test-sim-multi-seed-short:
    runs-on: ubuntu-latest
    needs: [build, install-runsim]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-go@v2.1.3
        with:
          go-version: 1.18
      - name: Display go version
        run: go version
      - uses: technote-space/get-diff-action@v4
        with:
          SUFFIX_FILTER: |
            **/**.go
            go.mod
            go.sum
          SET_ENV_NAME_INSERTIONS: 1
          SET_ENV_NAME_LINES: 1
      - uses: actions/cache@v2.1.6
        with:
          path: ~/go/bin
          key: ${{ runner.os }}-go-runsim-binary
        if: env.GIT_DIFF
      - name: test-sim-multi-seed-short
        run: |
          make test-sim-multi-seed-short
        if: env.GIT_DIFF
