opencc-sys 0.4.3+1.3.1

OpenCC bindings for Rust
Documentation
name: Debian Packages

on:
  workflow_dispatch:
    inputs:
      version:
        description: "Optional Debian package version override, for example 1.2.0 or 1.2.1~rc1"
        required: false
  push:
    tags:
      - "ver.*"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-deb:
    runs-on: ubuntu-24.04
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install packaging dependencies
        run: |
          sudo rm -f /etc/apt/sources.list
          sudo find /etc/apt/sources.list.d -maxdepth 1 \
            \( -name '*.list' -o -name '*.sources' \) \
            -exec rm -f {} +
          cat <<'EOF' | sudo tee /etc/apt/sources.list.d/opencc-cross.sources >/dev/null
          Types: deb
          URIs: http://archive.ubuntu.com/ubuntu
          Suites: noble noble-updates noble-backports
          Components: main restricted universe multiverse
          Architectures: amd64
          Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

          Types: deb
          URIs: http://security.ubuntu.com/ubuntu
          Suites: noble-security
          Components: main restricted universe multiverse
          Architectures: amd64
          Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

          Types: deb
          URIs: http://ports.ubuntu.com/ubuntu-ports
          Suites: noble noble-updates noble-backports noble-security
          Components: main restricted universe multiverse
          Architectures: arm64
          Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
          EOF
          sudo dpkg --add-architecture arm64
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends \
            cmake \
            ninja-build \
            dpkg-dev \
            file \
            pkg-config \
            python3 \
            gcc-aarch64-linux-gnu \
            g++-aarch64-linux-gnu \
            libc6-dev-arm64-cross \
            libstdc++-11-dev-arm64-cross \
            binutils-aarch64-linux-gnu \
            libc6:arm64 \
            libgcc-s1:arm64 \
            libstdc++6:arm64 \
            zlib1g:arm64

      - name: Resolve version
        id: version
        shell: bash
        env:
          INPUT_VERSION: ${{ github.event.inputs.version }}
        run: |
          if [ -n "${INPUT_VERSION:-}" ]; then
            VERSION="$INPUT_VERSION"
          else
            VERSION="$(bash scripts/compute-version.sh)"
            VERSION="${VERSION#ver.}"
            VERSION="${VERSION#v}"
          fi
          echo "value=$VERSION" >> "$GITHUB_OUTPUT"
          echo "VERSION=$VERSION" >> "$GITHUB_ENV"

      - name: Write ARM64 toolchain
        shell: bash
        run: |
          cat >"${RUNNER_TEMP}/toolchain-arm64.cmake" <<'EOF'
          set(CMAKE_SYSTEM_NAME Linux)
          set(CMAKE_SYSTEM_PROCESSOR aarch64)
          set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
          set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
          set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
          set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
          set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
          set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
          set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
          EOF

      - name: Build amd64 .deb packages
        shell: bash
        env:
          MAINTAINER: "OpenCC Contributors <opencc@users.noreply.github.com>"
          WORK_DIR: ${{ github.workspace }}/build-deb-amd64
          DIST_DIR: ${{ github.workspace }}/dist-amd64
        run: |
          bash scripts/build-deb-packages.sh "${VERSION}"
          mkdir -p dist-all/amd64
          cp "${DIST_DIR}"/*.deb dist-all/amd64/

      - name: Inspect amd64 package metadata
        shell: bash
        run: |
          dpkg-deb --info "dist-all/amd64/opencc_${VERSION}_amd64.deb"
          dpkg-deb --info "dist-all/amd64/opencc-jieba_${VERSION}_amd64.deb"

      - name: Build arm64 .deb packages
        shell: bash
        env:
          MAINTAINER: "OpenCC Contributors <opencc@users.noreply.github.com>"
          TARGET_ARCH: arm64
          CMAKE_TOOLCHAIN_FILE: "${{ runner.temp }}/toolchain-arm64.cmake"
          WORK_DIR: ${{ github.workspace }}/build-deb-arm64
          DIST_DIR: ${{ github.workspace }}/dist-arm64
          HOST_CORE_DICT_SOURCE_DIR: ${{ github.workspace }}/build-deb-amd64/pkgroot-opencc/usr/share/opencc
          HOST_JIEBA_MERGED_DICT_SOURCE: ${{ github.workspace }}/build-deb-amd64/pkgroot-opencc-jieba/usr/share/opencc/jieba_dict/jieba_merged.ocd2
        run: |
          bash scripts/build-deb-packages.sh "${VERSION}"
          mkdir -p dist-all/arm64
          cp "${DIST_DIR}"/*.deb dist-all/arm64/

      - name: Inspect arm64 package metadata
        shell: bash
        run: |
          dpkg-deb --info "dist-all/arm64/opencc_${VERSION}_arm64.deb"
          dpkg-deb --info "dist-all/arm64/opencc-jieba_${VERSION}_arm64.deb"

      - name: Assemble final artifacts
        shell: bash
        run: |
          rm -rf dist
          mkdir -p dist
          cp dist-all/amd64/*.deb dist/
          cp dist-all/arm64/*.deb dist/
          (
            cd dist
            sha256sum ./*.deb > SHA256SUMS
          )

      - name: Upload .deb artifacts
        uses: actions/upload-artifact@v4
        with:
          name: opencc-deb-${{ steps.version.outputs.value }}
          path: |
            dist/*.deb
            dist/SHA256SUMS

      - name: Upload assets to existing GitHub release
        if: startsWith(github.ref, 'refs/tags/')
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh release upload "${{ github.ref_name }}" \
            dist/*.deb \
            dist/SHA256SUMS \
            --clobber