name: Nightly
on:
  schedule:
    - cron: '0 0 * * *' # Every day at midnight
  pull_request:
    paths:
      - '.github/workflows/nightly.yml'

jobs:
  linux:
    name: Linux
    runs-on: ubuntu-latest

    defaults:
      run:
        working-directory: src/github.com/containerd/containerd

    steps:
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16.2'

      - uses: actions/checkout@v2
        with:
          path: src/github.com/containerd/containerd

      - name: Set env
        shell: bash
        run: |
          echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
          echo "${{ github.workspace }}/bin" >> $GITHUB_PATH

      #
      # Build
      #

      - name: Install dependencies
        run: |
          sudo add-apt-repository "deb [arch=arm64,s390x,ppc64el] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc) main" || true
          sudo add-apt-repository "deb [arch=arm64,s390x,ppc64el] http://ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-updates main" || true

          sudo dpkg --add-architecture arm64
          sudo dpkg --add-architecture s390x
          sudo dpkg --add-architecture ppc64el

          sudo apt-get update || true

          sudo apt-get install -y \
            crossbuild-essential-arm64 \
            crossbuild-essential-s390x \
            crossbuild-essential-ppc64el \
            libseccomp-dev:amd64 \
            libseccomp-dev:arm64 \
            libseccomp-dev:s390x \
            libseccomp-dev:ppc64el \
            libbtrfs-dev:amd64 \
            libbtrfs-dev:arm64 \
            libbtrfs-dev:s390x \
            libbtrfs-dev:ppc64el

      - name: Build amd64
        env:
          GOOS: linux
          GOARCH: amd64
        run: |
          make binaries
          mv bin bin_amd64

      - name: Build arm64
        env:
          GOOS: linux
          GOARCH: arm64
          CC: aarch64-linux-gnu-gcc
          CGO_ENABLED: 1
        run: |
          make binaries
          mv bin bin_arm64

      - name: Build s390x
        env:
          GOOS: linux
          GOARCH: s390x
          CGO_ENABLED: 1
          CC: s390x-linux-gnu-gcc
        run: |
          make binaries
          mv bin bin_s390x

      - name: Build ppc64le
        env:
          GOOS: linux
          GOARCH: ppc64le
          CGO_ENABLED: 1
          CC: powerpc64le-linux-gnu-gcc
        run: |
          make binaries
          mv bin bin_ppc64le

      #
      # Upload
      #

      - name: Upload artifacts (linux_amd64)
        uses: actions/upload-artifact@v1
        with:
          name: linux_amd64
          path: src/github.com/containerd/containerd/bin_amd64

      - name: Upload artifacts (linux_arm64)
        uses: actions/upload-artifact@v1
        with:
          name: linux_arm64
          path: src/github.com/containerd/containerd/bin_arm64

      - name: Upload artifacts (linux_s390x)
        uses: actions/upload-artifact@v1
        with:
          name: linux_s390x
          path: src/github.com/containerd/containerd/bin_s390x

      - name: Upload artifacts (linux_ppc64le)
        uses: actions/upload-artifact@v1
        with:
          name: linux_ppc64le
          path: src/github.com/containerd/containerd/bin_ppc64le

  windows:
    name: Windows
    runs-on: windows-latest

    defaults:
      run:
        working-directory: src/github.com/containerd/containerd

    steps:
      - uses: actions/setup-go@v2
        with:
          go-version: '1.16.2'

      - uses: actions/checkout@v2
        with:
          path: src/github.com/containerd/containerd

      - name: Set env
        shell: bash
        run: |
          echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
          echo "${{ github.workspace }}/bin" >> $GITHUB_PATH

      - name: Build amd64
        env:
          GOOS: windows
          GOARCH: amd64
        run: |
          make binaries

      - name: Upload artifacts (windows_amd64)
        uses: actions/upload-artifact@v1
        with:
          name: windows_amd64
          path: src/github.com/containerd/containerd/bin/
