name: AWS SNP Launch Measurement

on:
  schedule:
    # Run daily at 22:00.
    - cron: '0 22 * * *'
  workflow_dispatch:

jobs:
  run:
    runs-on: ubuntu-22.04
    steps:
    - name: Checkout repository
      uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        ref: ${{ github.head_ref }}
        path: constellation

    - name: Install necessary tools
      run: |
        sudo apt-get update
        sudo apt-get install -y python3 python3-pip
        sudo python3 -m pip install --user --require-hashes -r constellation/.github/workflows/aws-snp-launchmeasurements-requirements.txt

    - name: Install Nix
      uses: cachix/install-nix-action@6a9a9e84a173d90b3ffb42c5ddaf9ea033fad011 # v23

    - name: Download Firmware release
      id: download-firmware
      uses: robinraju/release-downloader@efa4cd07bd0195e6cc65e9e30c251b49ce4d3e51 # tag=v1.8
      with:
        repository: aws/uefi
        latest: true
        zipBall: true

    - name: Build UEFI firmware
      id: build-uefi
      shell: bash
      run: |
        # Unzip into a extra dir so that we can find "default.nix" and make sure we end up in the right directory.
        mkdir aws-uefi
        zipLocation=$(find . -name "uefi-*.zip")
        unzip -d aws-uefi "$zipLocation"
        buildfilePath="$(find aws-uefi -name 'default.nix')"
        pushd "$(dirname "$buildfilePath")" || exit 1

        nix-build --pure

        ovmfPath=$(realpath result/ovmf_img.fd)
        echo "ovmfPath=${ovmfPath}" | tee -a "$GITHUB_OUTPUT"
        popd || exit 1

    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
      with:
        repository: virtee/sev-snp-measure-go.git
        ref: e42b6f8991ed5a671d5d1e02a6b61f6373f9f8d8
        path: sev-snp-measure-go


    - name: Generate API objects
      shell: bash
      run: |
        pushd sev-snp-measure-go/sevsnpmeasure || exit 1
        go build .

        ./sevsnpmeasure parse-metadata ${{ steps.build-uefi.outputs.ovmfPath }} -o metadata.json

        jq < metadata.json

        popd || exit 1
