# GENERATED BY ./ci.generate.ts -- DO NOT DIRECTLY EDIT

name: ci
on:
  push:
    branches:
      - main
    tags:
      - '*'
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review
concurrency:
  group: '${{ github.workflow }}-${{ !contains(github.event.pull_request.labels.*.name, ''ci-test-flaky'') && github.head_ref || github.run_id }}'
  cancel-in-progress: true
jobs:
  pre_build:
    name: pre-build
    runs-on: ubuntu-latest
    outputs:
      skip_build: '${{ steps.check.outputs.skip_build }}'
    steps:
      - name: Configure git
        run: |-
          git config --global core.symlinks true
          git config --global fetch.parallel 32
        if: github.event.pull_request.draft == true
      - name: Clone repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 5
          submodules: false
        if: github.event.pull_request.draft == true
      - id: check
        run: |-
          GIT_MESSAGE=$(git log --format=%s -n 1 ${{github.event.after}})
          echo Commit message: $GIT_MESSAGE
          echo $GIT_MESSAGE | grep '\[ci\]' || (echo 'Exiting due to draft PR. Commit with [ci] to bypass.' ; echo 'skip_build=true' >> $GITHUB_OUTPUT)
        if: github.event.pull_request.draft == true
  build:
    name: '${{ matrix.job }} ${{ matrix.profile }} ${{ matrix.os_display_name }}'
    needs:
      - pre_build
    if: '${{ needs.pre_build.outputs.skip_build != ''true'' }}'
    runs-on: '${{ matrix.runner || matrix.os }}'
    timeout-minutes: 120
    defaults:
      run:
        shell: bash
    strategy:
      matrix:
        include:
          - os: macos-12
            job: test
            profile: debug
            os_display_name: macos-x86_64
          - os: macos-12
            job: test
            profile: release
            skip_pr: true
            runner: '${{ github.event_name == ''pull_request'' && ''ubuntu-22.04'' || ''macos-12'' }}'
            os_display_name: macos-x86_64
          - os: windows-2022
            job: test
            profile: debug
            os_display_name: windows-x86_64
          - os: windows-2022
            job: test
            profile: release
            skip_pr: true
            runner: '${{ github.event_name == ''pull_request'' && ''ubuntu-22.04'' || ''windows-2022'' }}'
            os_display_name: windows-x86_64
          - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
            job: test
            profile: release
            use_sysroot: true
            wpt: '${{ !startsWith(github.ref, ''refs/tags/'') }}'
            os_display_name: ubuntu-x86_64
          - os: '${{ github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
            job: bench
            profile: release
            use_sysroot: true
            skip_pr: '${{ !contains(github.event.pull_request.labels.*.name, ''ci-bench'') }}'
            runner: '${{ github.event_name == ''pull_request'' && !contains(github.event.pull_request.labels.*.name, ''ci-bench'') && ''ubuntu-22.04'' || github.repository == ''denoland/deno'' && ''ubuntu-22.04-xl'' || ''ubuntu-22.04'' }}'
            os_display_name: ubuntu-x86_64
          - os: ubuntu-22.04
            job: test
            profile: debug
            use_sysroot: true
            os_display_name: ubuntu-x86_64
          - os: ubuntu-22.04
            job: lint
            profile: debug
            os_display_name: ubuntu-x86_64
      fail-fast: '${{ github.event_name == ''pull_request'' || (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/'')) }}'
    env:
      CARGO_TERM_COLOR: always
      RUST_BACKTRACE: full
    steps:
      - name: Configure git
        run: |-
          git config --global core.symlinks true
          git config --global fetch.parallel 32
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Clone repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 5
          submodules: false
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Clone submodule ./test_util/std
        run: git submodule update --init --recursive --depth=1 -- ./test_util/std
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Clone submodule ./third_party
        run: git submodule update --init --recursive --depth=1 -- ./third_party
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Clone submodule ./test_util/wpt
        run: git submodule update --init --recursive --depth=1 -- ./test_util/wpt
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.wpt)'
      - name: 'Create source tarballs (release, linux)'
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (startsWith(matrix.os, 'ubuntu') &&
          matrix.profile == 'release' &&
          matrix.job == 'test' &&
          github.repository == 'denoland/deno' &&
          startsWith(github.ref, 'refs/tags/'))
        run: |-
          mkdir -p target/release
          tar --exclude=".git*" --exclude=target --exclude=third_party/prebuilt \
              -czvf target/release/deno_src.tar.gz -C .. deno
      - uses: dsherret/rust-toolchain-file@v1
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''lint'' || matrix.job == ''test'')'
        name: Install Deno
        uses: denoland/setup-deno@v1
        with:
          deno-version: v1.x
      - name: Install Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.11
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job != ''lint'')'
      - name: Remove unused versions of Python
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job != ''lint'' && (startsWith(matrix.os, ''windows'')))'
        shell: pwsh
        run: |-
          $env:PATH -split ";" |
            Where-Object { Test-Path "$_\python.exe" } |
            Select-Object -Skip 1 |
            ForEach-Object { Move-Item "$_" "$_.disabled" }
      - if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''bench'')'
        name: Install Node
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.profile == 'release' &&
          matrix.job == 'test' &&
          github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' ||
          startsWith(github.ref, 'refs/tags/')))
        name: Authenticate with Google Cloud
        uses: google-github-actions/auth@v1
        with:
          project_id: denoland
          credentials_json: '${{ secrets.GCP_SA_KEY }}'
          export_environment_variables: true
          create_credentials_file: true
      - name: Setup gcloud (unix)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os != 'Windows' &&
          matrix.profile == 'release' &&
          matrix.job == 'test' &&
          github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' ||
          startsWith(github.ref, 'refs/tags/')))
        uses: google-github-actions/setup-gcloud@v1
        with:
          project_id: denoland
      - name: Setup gcloud (windows)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os == 'Windows' &&
          matrix.profile == 'release' &&
          matrix.job == 'test' &&
          github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' ||
          startsWith(github.ref, 'refs/tags/')))
        uses: google-github-actions/setup-gcloud@v1
        env:
          CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
        with:
          project_id: denoland
      - name: Configure canary build
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main')
        run: echo "DENO_CANARY=true" >> $GITHUB_ENV
      - if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.use_sysroot)'
        name: Set up incremental LTO and sysroot build
        run: |-
          # Avoid running man-db triggers, which sometimes takes several minutes
          # to complete.
          sudo apt-get remove --purge -y man-db

          # Install clang-15, lld-15, and debootstrap.
          echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main" |
            sudo dd of=/etc/apt/sources.list.d/llvm-toolchain-jammy-15.list
          curl https://apt.llvm.org/llvm-snapshot.gpg.key |
            gpg --dearmor                                 |
          sudo dd of=/etc/apt/trusted.gpg.d/llvm-snapshot.gpg
          sudo apt-get update
          # this was unreliable sometimes, so try again if it fails
          sudo apt-get install --no-install-recommends debootstrap clang-15 lld-15 || echo 'Failed. Trying again.' && sudo apt-get clean && sudo apt-get update && sudo apt-get install --no-install-recommends debootstrap clang-15 lld-15

          # Create ubuntu-16.04 sysroot environment, which is used to avoid
          # depending on a very recent version of glibc.
          # `libc6-dev` is required for building any C source files.
          # `file` and `make` are needed to build libffi-sys.
          # `curl` is needed to build rusty_v8.
          sudo debootstrap                                     \
            --include=ca-certificates,curl,file,libc6-dev,make \
            --no-merged-usr --variant=minbase xenial /sysroot  \
            http://azure.archive.ubuntu.com/ubuntu
          sudo mount --rbind /dev /sysroot/dev
          sudo mount --rbind /sys /sysroot/sys
          sudo mount --rbind /home /sysroot/home
          sudo mount -t proc /proc /sysroot/proc

          cp third_party/prebuilt/linux64/libdl/libdl.so.2 .
          cp third_party/prebuilt/linux64/libdl/libdl.a .

          sudo ln -s libdl.so.2 /sysroot/lib/x86_64-linux-gnu/libdl.so
          sudo ln -s libdl.a /sysroot/lib/x86_64-linux-gnu/libdl.a

          # Configure the build environment. Both Rust and Clang will produce
          # llvm bitcode only, so we can use lld's incremental LTO support.
          cat >> $GITHUB_ENV << __0
          CARGO_PROFILE_BENCH_INCREMENTAL=false
          CARGO_PROFILE_BENCH_LTO=false
          CARGO_PROFILE_RELEASE_INCREMENTAL=false
          CARGO_PROFILE_RELEASE_LTO=false
          RUSTFLAGS<<__1
            -C linker-plugin-lto=true
            -C linker=clang-15
            -C link-arg=-fuse-ld=lld-15
            -C link-arg=--sysroot=/sysroot
            -C link-arg=-ldl
            -C link-arg=-Wl,--allow-shlib-undefined
            -C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
            -C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
            ${{ env.RUSTFLAGS }}
          __1
          RUSTDOCFLAGS<<__1
            -C linker-plugin-lto=true
            -C linker=clang-15
            -C link-arg=-fuse-ld=lld-15
            -C link-arg=--sysroot=/sysroot
            -C link-arg=-ldl
            -C link-arg=-Wl,--allow-shlib-undefined
            -C link-arg=-Wl,--thinlto-cache-dir=$(pwd)/target/release/lto-cache
            -C link-arg=-Wl,--thinlto-cache-policy,cache_size_bytes=700m
            ${{ env.RUSTFLAGS }}
          __1
          CC=clang-15
          CFLAGS=-flto=thin --sysroot=/sysroot
          __0
      - name: Log versions
        run: |-
          python --version
          rustc --version
          cargo --version
          if [ "${{ matrix.job }}" == "lint" ]
          then
            deno --version
          fi
          if [ "${{ matrix.job }}" == "bench" ]
          then
            node -v
          fi
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Cache Cargo home
        uses: actions/cache@v3
        with:
          path: |-
            ~/.cargo/registry/index
            ~/.cargo/registry/cache
            ~/.cargo/git/db
          key: '20-cargo-home-${{ matrix.os }}-${{ hashFiles(''Cargo.lock'') }}'
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: Restore cache build output (PR)
        uses: actions/cache/restore@v3
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (github.ref != ''refs/heads/main'' && !startsWith(github.ref, ''refs/tags/''))'
        with:
          path: |-
            ./target
            !./target/*/gn_out
            !./target/*/*.zip
            !./target/*/*.tar.gz
          key: never_saved
          restore-keys: '19-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-'
      - name: Apply and update mtime cache
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (!startsWith(github.ref, ''refs/tags/''))'
        uses: ./.github/mtime_cache
        with:
          cache-path: ./target
      - name: Shallow clone crates.io index
        run: |-
          if [ ! -d ~/.cargo/registry/index/github.com-1ecc6299db9ec823/.git ]
          then
            git clone --depth 1 --no-checkout                      \
                      https://github.com/rust-lang/crates.io-index \
                      ~/.cargo/registry/index/github.com-1ecc6299db9ec823
          fi
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr)'
      - name: test_format.js
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''lint'')'
        run: deno run --unstable --allow-write --allow-read --allow-run ./tools/format.js --check
      - name: Lint PR title
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''lint'' && github.event_name == ''pull_request'')'
        env:
          PR_TITLE: '${{ github.event.pull_request.title }}'
        run: deno run ./tools/verify_pr_title.js "$PR_TITLE"
      - name: lint.js
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''lint'')'
        run: deno run --unstable --allow-write --allow-read --allow-run ./tools/lint.js
      - name: Build debug
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''test'' && matrix.profile == ''debug'')'
        run: cargo build --locked --all-targets
        env:
          CARGO_PROFILE_DEV_DEBUG: 0
      - name: Build release
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && ((matrix.job == 'test' || matrix.job == 'bench') &&
          matrix.profile == 'release' && (matrix.use_sysroot ||
          (github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' ||
          startsWith(github.ref, 'refs/tags/')))))
        run: cargo build --release --locked --all-targets
      - name: Upload PR artifact (linux)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' &&
          matrix.profile == 'release' && (matrix.use_sysroot ||
          (github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' ||
          startsWith(github.ref, 'refs/tags/')))))
        uses: actions/upload-artifact@v3
        with:
          name: 'deno-${{ github.event.number }}'
          path: target/release/deno
      - name: Pre-release (linux)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (startsWith(matrix.os, 'ubuntu') &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno')
        run: |-
          cd target/release
          zip -r deno-x86_64-unknown-linux-gnu.zip deno
          ./deno types > lib.deno.d.ts
      - name: Pre-release (mac)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (startsWith(matrix.os, 'macOS') &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
        run: |-
          cd target/release
          zip -r deno-x86_64-apple-darwin.zip deno
      - name: Pre-release (windows)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (startsWith(matrix.os, 'windows') &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
        shell: pwsh
        run: Compress-Archive -CompressionLevel Optimal -Force -Path target/release/deno.exe -DestinationPath target/release/deno-x86_64-pc-windows-msvc.zip
      - name: Upload canary to dl.deno.land (unix)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os != 'Windows' &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main')
        run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/'
      - name: Upload canary to dl.deno.land (windows)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os == 'Windows' &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main')
        env:
          CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
        run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/'
      - name: Test debug
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' && matrix.profile == 'debug' &&
          !startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'ubuntu'))
        run: cargo test --locked
        env:
          CARGO_PROFILE_DEV_DEBUG: 0
      - name: Test debug (fast)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' && matrix.profile == 'debug' && 
          !startsWith(matrix.os, 'ubuntu'))
        run: |-
          cargo test --locked --lib
          cargo test --locked --test '*'
        env:
          CARGO_PROFILE_DEV_DEBUG: 0
      - name: Test release
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' && matrix.profile == 'release' &&
          (matrix.use_sysroot || (
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))))
        run: cargo test --release --locked
      - name: Check deno binary
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.profile == ''release'' && startsWith(github.ref, ''refs/tags/''))'
        run: target/release/deno eval "console.log(1+2)" | grep 3
        env:
          NO_COLOR: 1
      - name: Check deno binary (in sysroot)
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.profile == ''release'' && matrix.use_sysroot)'
        run: sudo chroot /sysroot "$(pwd)/target/release/deno" --version
      - name: Configure hosts file for WPT
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.wpt)'
        run: ./wpt make-hosts-file | sudo tee -a /etc/hosts
        working-directory: test_util/wpt/
      - name: Run web platform tests (debug)
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.wpt && matrix.profile == ''debug'')'
        env:
          DENO_BIN: ./target/debug/deno
        run: |-
          deno run --allow-env --allow-net --allow-read --allow-run \
                  --allow-write --unstable                         \
                  --lock=tools/deno.lock.json                      \
                  ./tools/wpt.ts setup
          deno run --allow-env --allow-net --allow-read --allow-run \
                   --allow-write --unstable                         \
                   --lock=tools/deno.lock.json              \
                   ./tools/wpt.ts run --quiet --binary="$DENO_BIN"
      - name: Run web platform tests (release)
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.wpt && matrix.profile == ''release'')'
        env:
          DENO_BIN: ./target/release/deno
        run: |-
          deno run --allow-env --allow-net --allow-read --allow-run \
                   --allow-write --unstable                         \
                   --lock=tools/deno.lock.json                      \
                   ./tools/wpt.ts setup
          deno run --allow-env --allow-net --allow-read --allow-run \
                   --allow-write --unstable                         \
                   --lock=tools/deno.lock.json                      \
                   ./tools/wpt.ts run --quiet --release             \
                                      --binary="$DENO_BIN"          \
                                      --json=wpt.json               \
                                      --wptreport=wptreport.json
      - name: Upload wpt results to dl.deno.land
        continue-on-error: true
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.wpt &&
          runner.os == 'Linux' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))
        run: |-
          gzip ./wptreport.json
          gsutil -h "Cache-Control: public, max-age=3600" cp ./wpt.json gs://dl.deno.land/wpt/$(git rev-parse HEAD).json
          gsutil -h "Cache-Control: public, max-age=3600" cp ./wptreport.json.gz gs://dl.deno.land/wpt/$(git rev-parse HEAD)-wptreport.json.gz
          echo $(git rev-parse HEAD) > wpt-latest.txt
          gsutil -h "Cache-Control: no-cache" cp wpt-latest.txt gs://dl.deno.land/wpt-latest.txt
      - name: Upload wpt results to wpt.fyi
        continue-on-error: true
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.wpt &&
          runner.os == 'Linux' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))
        env:
          WPT_FYI_USER: deno
          WPT_FYI_PW: '${{ secrets.WPT_FYI_PW }}'
          GITHUB_TOKEN: '${{ secrets.DENOBOT_PAT }}'
        run: |-
          ./target/release/deno run --allow-all --lock=tools/deno.lock.json \
              ./tools/upload_wptfyi.js $(git rev-parse HEAD) --ghstatus
      - name: Run benchmarks
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''bench'' && !startsWith(github.ref, ''refs/tags/''))'
        run: cargo bench --locked
      - name: Post Benchmarks
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'bench' &&
          github.repository == 'denoland/deno' &&
          github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/'))
        env:
          DENOBOT_PAT: '${{ secrets.DENOBOT_PAT }}'
        run: |-
          git clone --depth 1 --branch gh-pages                             \
              https://${DENOBOT_PAT}@github.com/denoland/benchmark_data.git \
              gh-pages
          ./target/release/deno run --allow-all --unstable \
              ./tools/build_benchmark_jsons.js --release
          cd gh-pages
          git config user.email "propelml@gmail.com"
          git config user.name "denobot"
          git add .
          git commit --message "Update benchmarks"
          git push origin gh-pages
      - name: Build product size info
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job != ''lint'' && matrix.profile != ''debug'' && github.repository == ''denoland/deno'' && (github.ref == ''refs/heads/main'' || startsWith(github.ref, ''refs/tags/'')))'
        run: |-
          du -hd1 "./target/${{ matrix.profile }}"
          du -ha  "./target/${{ matrix.profile }}/deno"
      - name: Worker info
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && (matrix.job == ''bench'')'
        run: |-
          cat /proc/cpuinfo
          cat /proc/meminfo
      - name: Upload release to dl.deno.land (unix)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os != 'Windows' &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          startsWith(github.ref, 'refs/tags/'))
        run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/'
      - name: Upload release to dl.deno.land (windows)
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (runner.os == 'Windows' &&
          matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          startsWith(github.ref, 'refs/tags/'))
        env:
          CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
        run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/release/${GITHUB_REF#refs/*/}/'
      - name: Create release notes
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          startsWith(github.ref, 'refs/tags/'))
        run: |-
          export PATH=$PATH:$(pwd)/target/release
          ./tools/release/05_create_release_notes.ts
      - name: Upload release to GitHub
        uses: softprops/action-gh-release@v0.1.15
        if: |-
          !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' &&
          matrix.profile == 'release' &&
          github.repository == 'denoland/deno' &&
          startsWith(github.ref, 'refs/tags/'))
        env:
          GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
        with:
          files: |-
            target/release/deno-x86_64-pc-windows-msvc.zip
            target/release/deno-x86_64-unknown-linux-gnu.zip
            target/release/deno-x86_64-apple-darwin.zip
            target/release/deno_src.tar.gz
            target/release/lib.deno.d.ts
          body_path: target/release/release-notes.md
          draft: true
      - name: Save cache build output (main)
        uses: actions/cache/save@v3
        if: '!(github.event_name == ''pull_request'' && matrix.skip_pr) && ((matrix.job == ''test'' || matrix.job == ''lint'') && github.ref == ''refs/heads/main'')'
        with:
          path: |-
            ./target
            !./target/*/gn_out
            !./target/*/*.zip
            !./target/*/*.tar.gz
          key: '19-cargo-target-${{ matrix.os }}-${{ matrix.profile }}-${{ matrix.job }}-${{ github.sha }}'
  publish-canary:
    name: publish canary
    runs-on: ubuntu-22.04
    needs:
      - build
    if: github.repository == 'denoland/deno' && github.ref == 'refs/heads/main'
    steps:
      - name: Authenticate with Google Cloud
        uses: google-github-actions/auth@v1
        with:
          project_id: denoland
          credentials_json: '${{ secrets.GCP_SA_KEY }}'
          export_environment_variables: true
          create_credentials_file: true
      - name: Setup gcloud
        uses: google-github-actions/setup-gcloud@v1
        with:
          project_id: denoland
      - name: Upload canary version file to dl.deno.land
        run: |-
          echo ${{ github.sha }} > canary-latest.txt
          gsutil -h "Cache-Control: no-cache" cp canary-latest.txt gs://dl.deno.land/canary-latest.txt