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