name: Build and Release

on:
  push:
    branches:
      - main
    tags:
      - "[0-9]+.*"
    paths:
      - "**/**"
      - "!**.md"
      - "!**.gitignore"
      - "!.github/**"
  workflow_dispatch:

jobs:
  Release:
    runs-on: ubuntu-latest
    if: github.repository == 'iDvel/rime-ice'

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Go
        if: ${{ contains(github.event.head_commit.message, ' [build]') || github.event_name == 'workflow_dispatch' }}
        uses: actions/setup-go@v5
        with:
          go-version: 1.22

      - name: Check and build
        id: check_and_build
        if: ${{ contains(github.event.head_commit.message, ' [build]') || github.event_name == 'workflow_dispatch' }}
        run: |
          cd others/script
          go mod tidy
          go run main.go --rime_path "${{ github.workspace }}" --auto_confirm

      - name: Pack dicts
        run: |
          ## 备用 Prepare opencc dict, 启用后 emoji.json 也要做改动
          # apt install opencc
          # opencc_dict -i opencc/emoji.txt -o opencc/emoji.ocd2 -f text -t ocd2

          mkdir dist
          echo "Pack all ..."
          find . -maxdepth 1 -name "*.lua" -o -name "*.yaml" -o -name "*.txt" | zip dist/full.zip -@
          zip -r dist/full.zip cn_dicts en_dicts lua opencc LICENSE
          echo "Pack dicts ..."
          zip -r dist/all_dicts.zip cn_dicts en_dicts opencc radical_pinyin.dict.yaml
          echo "Pack cn_dicts ..."
          zip -r dist/cn_dicts.zip cn_dicts
          echo "Pack en_dicts ..."
          zip -r dist/en_dicts.zip en_dicts
          echo "Pack opencc ..."
          zip -r dist/opencc.zip opencc
          echo "copy LICENSE and README.md..."
          cp LICENSE dist/LICENSE.txt
          cp README.md dist/README.md

      - name: Create nightly release
        if: ${{ github.ref == 'refs/heads/main' }}
        uses: "softprops/action-gh-release@v2"
        with:
          body: |
            ## 说明

            这里是每次提交后自动打包的版本，包含最新的功能和词库

            - `README.md`：简易的使用说明
            - `full.zip` : 包含所有词典和方案文件
            - `cn_dicts.zip`：中文词库
            - `en_dicts.zip`：英文词库
            - `opencc.zip`：opencc 词库（emoji 等）
            - `all_dicts.zip`：以上三个词库的整合
            - `LICENSE.txt`：开源协议

          tag_name: nightly
          name: "nightly build"
          make_latest: true
          files: |
            dist/*

      - name: Create stable release
        if: startsWith(github.ref, 'refs/tags/')
        uses: "softprops/action-gh-release@v2"
        with:
          body: |
            ## 说明

            - `README.md`：简易的使用说明
            - `full.zip` : 包含所有词典和方案文件
            - `cn_dicts.zip`：中文词库
            - `en_dicts.zip`：英文词库
            - `opencc.zip`：opencc 词库（emoji 等）
            - `all_dicts.zip`：以上三个词库的整合
            - `LICENSE.txt`：开源协议
          draft: true
          make_latest: true
          files: |
            dist/*

      - name: Push and commit
        if: ${{ steps.check_and_build.outcome == 'success' }}
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
          git add --all
          if ! git diff --cached --quiet; then
            COMMIT_MSG=$(git log -1 --pretty=%B | sed -e 's/\s\[build\]$//' -e 's/^[a-zA-Z()]*:\s*//')
            git commit -m "build(ci): auto build for -> ${COMMIT_MSG} <-"
            git push
          else
            echo "No changes to commit."
          fi