name: Alibaba Cloud Import

on:
  push:
    branches:
      - alitest
  workflow_dispatch:

env:
  MAKEFLAGS: "-j4 GITVERSION=${{ github.sha }}"

jobs:

  build:
    name: Build / ${{ matrix.arch }}-${{ matrix.platform }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - arch: arm64
            platform: efi
          - arch: x86_64
            platform: efi
          - arch: x86_64
            platform: pcbios
    container:
      image: ghcr.io/ipxe/ipxe-builder-${{ matrix.arch }}
    env:
      bindir: bin-${{ matrix.arch }}-${{ matrix.platform }}
    steps:

      - name: Check out code
        uses: actions/checkout@v6

      - name: Build
        working-directory: src
        run: |
          make CONFIG=cloud EMBED=config/cloud/ali.ipxe \
               ${{ env.bindir }}/ipxe.usb

      - name: Upload
        uses: actions/upload-artifact@v6
        with:
          name: ${{ env.bindir }}
          if-no-files-found: error
          path: |
            src/${{ env.bindir }}/ipxe.usb

  import:
    name: Import
    runs-on: ubuntu-latest
    needs:
      - build
    container:
      image: ghcr.io/ipxe/ipxe-builder-cloud
    env:
      binaries: >-
        bin-arm64-efi/ipxe.usb
        bin-x86_64-efi/ipxe.usb
        bin-x86_64-pcbios/ipxe.usb
      family: >-
        ${{ github.ref == 'refs/heads/alitest' && '--family ipxetest' || '' }}
    environment: ali-import
    permissions:
      id-token: write
      contents: read
    steps:

      - name: Check out code
        uses: actions/checkout@v6

      - name: Download
        uses: actions/download-artifact@v7
        with:
          path: src
          pattern: "bin-*"

      - name: Log in
        uses: aliyun/configure-aliyun-credentials-action@v1
        with:
          role-to-assume: ${{ vars.ALICLOUD_ROLE }}
          oidc-provider-arn: ${{ vars.ALICLOUD_IDP }}

      - name: Log in (OSS)
        run: |
          cat >> "${GITHUB_ENV}" <<EOF
          OSS_ACCESS_KEY_ID=${ALIBABA_CLOUD_ACCESS_KEY_ID}
          OSS_ACCESS_KEY_SECRET=${ALIBABA_CLOUD_ACCESS_KEY_SECRET}
          OSS_SESSION_TOKEN=${ALIBABA_CLOUD_SECURITY_TOKEN}
          EOF

      - name: Import
        working-directory: src
        run: |
          ../contrib/cloud/ali-import \
              --verbose \
              --public \
              --overwrite \
              ${{ env.family }} \
              ${{ env.binaries }}
