on:
  push:
    tags:
      - 'v*'
      - '!v*-voyager'

name: Create Release

jobs:
  parse-tag:
    runs-on: ubuntu-latest
    outputs:
      semver: ${{ steps.parse.outputs.semver }}
    steps:
      - name: Extract Semver
        id: parse
        run: |
          semver=${TAG#"refs/tags/v"}
          echo "semver=$semver" >> "$GITHUB_OUTPUT"
        env:
          TAG: ${{ github.ref }}

  gate:
    needs: parse-tag
    uses: dxworks/pipelines/.github/workflows/release-gate.yml@v1
    with:
      java-version: '21'

  archive:
    needs: [parse-tag, gate]
    uses: dxworks/pipelines/.github/workflows/release-archive.yml@v1
    with:
      version: ${{ needs.parse-tag.outputs.semver }}
      java-version: '21'

  npm:
    needs: [parse-tag, gate]
    uses: dxworks/pipelines/.github/workflows/release-npm.yml@v1
    with:
      version: ${{ needs.parse-tag.outputs.semver }}
    permissions:
      contents: read
      packages: write
      id-token: write

  docker:
    needs: [parse-tag, gate]
    uses: dxworks/pipelines/.github/workflows/release-docker.yml@v1
    with:
      version: ${{ needs.parse-tag.outputs.semver }}
      image-name: dxworks/inspector-git
      java-version: '21'
      build-script: ./scripts/build.sh
    secrets:
      dockerhub-username: ${{ secrets.DOCKERHUB_USERNAME }}
      dockerhub-token: ${{ secrets.DOCKERHUB_TOKEN }}

  github-release:
    needs: [parse-tag, archive, npm, docker]
    if: |
      always() &&
      needs.archive.result == 'success' &&
      (needs.npm.result == 'success' || needs.npm.result == 'skipped') &&
      (needs.docker.result == 'success' || needs.docker.result == 'skipped')
    permissions:
      contents: write
    uses: dxworks/pipelines/.github/workflows/release-github.yml@v1
    with:
      version: ${{ needs.parse-tag.outputs.semver }}
      tag: v${{ needs.parse-tag.outputs.semver }}
      release-name: Inspector Git ${{ needs.parse-tag.outputs.semver }}
      asset-name: iglog.zip
      release-notes-file: releaseNotes/v${{ needs.parse-tag.outputs.semver }}.md
