name: nightly

on:
  schedule:
    - cron: '0 0 * * *'  # every day at midnight
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always
  # Disable incremental compilation.
  #
  # Incremental compilation is useful as part of an edit-build-test-edit cycle,
  # as it lets the compiler avoid recompiling code that hasn't changed. However,
  # on CI, we're not making small edits; we're almost always building the entire
  # project from scratch. Thus, incremental compilation on CI actually
  # introduces *additional* overhead to support making future builds
  # faster...but no future builds will ever occur in any given CI environment.
  #
  # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow
  # for details.
  CARGO_INCREMENTAL: 0
  # Allow more retries for network requests in cargo (downloading crates) and
  # rustup (installing toolchains). This should help to reduce flaky CI failures
  # from transient network timeouts or other issues.
  CARGO_NET_RETRY: 10
  RUSTUP_MAX_RETRIES: 10
  # Don't emit giant backtraces in the CI logs.
  RUST_BACKTRACE: short

jobs:
  release:
    name: build release binaries
    runs-on: [ubuntu-ghcloud]
    steps:
      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11  # Pin v4.1.1
      - name: cargo build
        uses: actions-rs/cargo@ae10961054e4aa8b4aa7dffede299aaf087aa33b # pin@v1.0.3
        with:
          command: build
          args: --all-targets --all-features --release --profile=release

  # This job seems to be consistently producing false-positives, lets disable for now
  # cargo-udeps:
  #   runs-on: [ubuntu-ghcloud]
  #   steps:
  #     - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11  # Pin v4.1.1
  #     # Enable caching of the 'librocksdb-sys' crate by additionally caching the
  #     # 'librocksdb-sys' src directory which is managed by cargo
  #     - uses: bmwill/rust-cache@v1 # Fork of 'Swatinem/rust-cache' which allows caching additional paths
  #       with:
  #         path: ~/.cargo/registry/src/**/librocksdb-sys-*
  #     - name: Install cargo-udeps, and cache the binary
  #       uses: baptiste0928/cargo-install@1cd874a5478fdca35d868ccc74640c5aabbb8f1b # pin@v3.0.0
  #       with:
  #         crate: cargo-udeps
  #         locked: true
  #     - name: Install cargo-hakari, and cache the binary
  #       uses: baptiste0928/cargo-install@1cd874a5478fdca35d868ccc74640c5aabbb8f1b # pin@v3.0.0
  #       with:
  #         crate: cargo-hakari
  #         locked: true
  #     # Normally running cargo-udeps requires use of a nightly compiler
  #     # In order to have a more stable and less noisy experience, lets instead
  #     # opt to use the stable toolchain specified via the 'rust-toolchain' file
  #     # and instead enable nightly features via 'RUSTC_BOOTSTRAP'
  #     - name: run cargo-udeps
  #       run: |
  #         # First we need to disable the workspace-hack package
  #         cargo hakari disable
  #         cargo hakari remove-deps -y
  #         RUSTC_BOOTSTRAP=1 cargo udeps

  report-status:
    name: Report Status
    runs-on: ubuntu-latest
    if: always()
    needs: [release]
    steps:
      - uses: technote-space/workflow-conclusion-action@45ce8e0eb155657ab8ccf346ade734257fd196a5 # Pin v4.1.1

      - name: Post to slack
        uses: slackapi/slack-github-action@v1.24.0
        env:
          SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
        if: env.WORKFLOW_CONCLUSION == 'failure' # notify only if failure
        with:
          channel-id: 'build-failures-sui'
          payload: |
            {
              "text": "Workflow *${{ github.workflow }}* failed",
              "blocks": [
                {
                  "type": "section",
                  "text": {
                    "type": "mrkdwn",
                    "text": "Workflow *${{ github.workflow }}* failed"
                  }
                },
                {
                  "type": "divider"
                },
                {
                  "type": "section",
                  "text": {
                    "type": "mrkdwn",
                    "text": "Logs are here: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
                  }
                }
              ]
            }