name: Build Release Packages

on:
  release:
    types: [published]

  workflow_dispatch:
    inputs:
      version:
        description: Version of Valkey to build
        required: true

permissions:
  contents: read

jobs:
  # This job provides the version metadata from the tag for the other jobs to use.
  release-build-get-meta:
    name: Get metadata to build
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.get_version.outputs.VERSION }}
    steps:

      - run: |
          echo "Version: ${{ inputs.version || github.ref_name }}"
        shell: bash

      # This step is to consolidate the three different triggers into a single "version"
      # 1. If manual dispatch - use the version provided.
      # 3. If tag trigger, use that tag.
      - name: Get the version
        id: get_version
        run: |
          VERSION="${INPUT_VERSION}"
          if [ -z "${VERSION}" ]; then
            exit 1
          fi
          echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
        shell: bash
        env:
          # Use the dispatch variable in preference, if empty use the context ref_name which should
          # only ever be a tag
          INPUT_VERSION: ${{ inputs.version || github.ref_name }}

  generate-build-matrix:
    name: Generating build matrix
    runs-on: ubuntu-latest
    outputs:
      x86_64-build-matrix: ${{ steps.set-matrix.outputs.x86_64-build-matrix }}
      arm64-build-matrix: ${{ steps.set-matrix.outputs.arm64-build-matrix }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      # Set up the list of target to build so we can pass the JSON to the reusable job
      - uses: ./.github/actions/generate-package-build-matrix
        id: set-matrix
        with:
          ref: ${{ inputs.version || github.ref_name }}

  release-build-linux-x86-packages:
    needs:
      - release-build-get-meta
      - generate-build-matrix
    uses: ./.github/workflows/call-build-linux-x86-packages.yml
    with:
      version: ${{ needs.release-build-get-meta.outputs.version }}
      ref: ${{ inputs.version || github.ref_name }}
      build_matrix: ${{ needs.generate-build-matrix.outputs.x86_64-build-matrix }}
    secrets:
      token: ${{ secrets.GITHUB_TOKEN }}
      bucket: ${{ secrets.AWS_S3_BUCKET }}
      access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
      secret_access_key: ${{ secrets.AWS_S3_ACCESS_KEY }}

  release-build-linux-arm-packages:
    needs:
      - release-build-get-meta
      - generate-build-matrix
    uses: ./.github/workflows/call-build-linux-arm-packages.yml
    with:
      version: ${{ needs.release-build-get-meta.outputs.version }}
      ref: ${{ inputs.version || github.ref_name }}
      build_matrix: ${{ needs.generate-build-matrix.outputs.arm64-build-matrix }}
    secrets:
      token: ${{ secrets.GITHUB_TOKEN }}
      bucket: ${{ secrets.AWS_S3_BUCKET }}
      access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }}
      secret_access_key: ${{ secrets.AWS_S3_ACCESS_KEY }}
