# SPDX-FileCopyrightText: 2023 Johannes Loher
#
# SPDX-License-Identifier: MIT

$schema: https://raw.githubusercontent.com/woodpecker-ci/woodpecker/master/pipeline/schema/schema.json

variables:
  - &node_image node:22
  - &enable_pnpm
    - corepack enable
    - corepack prepare pnpm@latest --activate
  - &is_latest_channel
    evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$"
  - &is_beta_channel
    evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-[0-9]+$"
  - &release_plugin woodpeckerci/plugin-gitea-release
  - &release_base_settings
    base_url: ${CI_FORGE_URL}
    title: ${CI_COMMIT_TAG}
    note: CHANGELOG.md
    files:
      - ${CI_REPO_NAME}.zip
      - ${CI_REPO_NAME}/system.json
    api_key:
      from_secret: forge_token

when:
  event: tag
  evaluate: CI_COMMIT_TAG matches "^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(-[0-9]+)?$"

depends_on:
  - checks

steps:
  install:
    image: *node_image
    commands:
      - <<: *enable_pnpm
      - pnpm install --frozen-lockfile
  build:
    image: *node_image
    environment:
      NODE_ENV: production
    commands:
      - export APPDATA=$(pwd)
      - <<: *enable_pnpm
      - pnpm build
  package:
    group: prepare-release
    image: alpine:latest
    commands:
      - apk update
      - apk add zip curl
      - mv dist ${CI_REPO_NAME}
      - zip -r ${CI_REPO_NAME}.zip ${CI_REPO_NAME}/*
  changelog:
    group: prepare-release
    image: *node_image
    commands:
      - <<: *enable_pnpm
      - pnpm changelog
  choose-latest-channel:
    group: prepare-release
    image: alpine:latest
    commands:
      - echo latest > .RELEASE_CHANNEL
    when:
      <<: *is_latest_channel
  choose-beta-channel:
    group: prepare-release
    image: alpine:latest
    commands:
      - echo beta > .RELEASE_CHANNEL
    when:
      <<: *is_beta_channel
  release-latest:
    image: *release_plugin
    settings:
      <<: *release_base_settings
    when:
      <<: *is_latest_channel
  release-beta:
    image: *release_plugin
    settings:
      <<: *release_base_settings
      prerelease: true
    when:
      <<: *is_beta_channel
  publish-manifest:
    group: publish
    image: alpine:latest
    commands:
      - apk update
      - apk add curl
      - export RELEASE_CHANNEL=$(cat .RELEASE_CHANNEL)
      - 'curl --header "Authorization: token $${FORGE_TOKEN}" -X "DELETE" "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
      - 'curl --fail --header "Authorization: token $${FORGE_TOKEN}" --upload-file ${CI_REPO_NAME}/system.json "${CI_FORGE_URL}/api/packages/${CI_REPO_OWNER}/generic/${CI_REPO_NAME}/$${RELEASE_CHANNEL}/system.json"'
    secrets:
      - forge_token
  publish-to-foundry-admin:
    group: publish
    image: johannesloher/foundry-publish:v4.0.0
    commands:
      - export FVTT_MANIFEST_PATH=${CI_REPO_NAME}/system.json
      - export FVTT_MANIFEST_URL=${CI_REPO_URL}/releases/download/${CI_COMMIT_TAG}/system.json
      - foundry-publish
    secrets:
      - fvtt_package_id
      - fvtt_token
    when:
      <<: *is_latest_channel