name: AWS-Zig Build
on:
  workflow_dispatch:
  push:
    branches:
      - 'zig-0.13'
env:
  ACTIONS_RUNTIME_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  ACTIONS_RUNTIME_URL: ${{ env.GITHUB_SERVER_URL }}/api/actions_pipeline/
jobs:
  build-zig-amd64-host:
    runs-on: ubuntu-latest
    # Need to use the default container with node and all that, so we can
    # use JS-based actions like actions/checkout@v3...
    # container:
    #   image: alpine:3.15.0
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4
        with:
          ref: zig-0.13
      - name: Setup Zig
        uses: mlugg/setup-zig@v1.2.1
        with:
          version: 0.13.0
      - name: Run tests
        run: zig build test --verbose
      # Zig build scripts don't have the ability to import depenedencies directly
      # (https://github.com/ziglang/zig/issues/18164). We can allow downstream
      # build scripts to import aws with a few tweaks, but we can't @import("src/aws.zig")
      # until we have our models built. So we have to have the build script
      # basically modified, only during packaging, to allow this use case
      #
      # Zig package manager expects everything to be inside a directory in the archive,
      # which it then strips out on download. So we need to shove everything inside a directory
      # the way GitHub/Gitea does for repo archives
      #
      # Also, zig tar process doesn't handle gnu format for long names, nor does it seam to
      # handle posix long name semantics cleanly either. ustar works. This
      # should be using git archive, but we need our generated code to be part of it
      - name: Package source code with generated models
        run: |
          sed -i 's#// UNCOMMENT AFTER MODEL GEN TO USE IN BUILD SCRIPTS //##' build.zig
          tar -czf ${{ runner.temp }}/${{ github.sha }}-with-models.tar.gz \
            --format ustar \
            --exclude 'zig-*' \
            *
      # Something in this PR broke this transform. I don't mind removing it, but
      # the PR attempts to handle situations with or without a prefix, but it
      # doesn't. I have not yet determined what the problem is, though
      # https://github.com/ziglang/zig/pull/19111/files
      # --transform 's,^,${{ github.sha }}/,' *
      # - name: Sign
      #   id: sign
      #   uses: https://git.lerch.org/lobo/action-hsm-sign@v1
      #   with:
      #     pin: ${{ secrets.HSM_USER_PIN }}
      #     files: ???
      #     public_key: 'https://emil.lerch.org/serverpublic.pem'
      # - run: |
      #     echo "Source 0 should be ./bar: ${{ steps.sign.outputs.SOURCE_0 }}"
      # - run: |
      #     echo "Signature 0 should be ./bar.sig: ${{ steps.sign.outputs.SIG_0 }}"
      # - run: echo "URL of bar (0) is ${{ steps.sign.outputs.URL_0 }}"
      # - run: |
      #     echo "Source 1 should be ./foo: ${{ steps.sign.outputs.SOURCE_1 }}"
      # - run: |
      #     echo "Signature 1 should be ./foo.sig: ${{ steps.sign.outputs.SIG_1 }}"
      # - run: echo "URL of foo (1) is ${{ steps.sign.outputs.URL_1 }}"
      - name: Publish source code with generated models
        run: |
          curl --user ${{ github.actor }}:${{ secrets.PACKAGE_PUSH }} \
            --upload-file ${{ runner.temp }}/${{ github.sha }}-with-models.tar.gz \
            https://git.lerch.org/api/packages/lobo/generic/aws-sdk-with-models/${{ github.sha }}/${{ github.sha }}-with-models.tar.gz
      - name: Build example
        run: ( cd example && zig build ) # Make sure example builds
      - name: Notify
        uses: https://git.lerch.org/lobo/action-notify-ntfy@v2
        if: always()
        with:
          host: ${{ secrets.NTFY_HOST }}
          topic: ${{ secrets.NTFY_TOPIC }}
          user: ${{ secrets.NTFY_USER }}
          password: ${{ secrets.NTFY_PASSWORD }}