Skip to content

fix: CI build failures — manifest iter sentinel, Linux X11 deps #2

fix: CI build failures — manifest iter sentinel, Linux X11 deps

fix: CI build failures — manifest iter sentinel, Linux X11 deps #2

name: TurtleTerm Native Linux Packages
on:
push:
tags:
- 'turtle-term-v*'
workflow_dispatch:
inputs:
version:
description: 'Package version without prefix, for example 0.1.0-dev'
required: false
default: '0.1.0-dev'
permissions:
contents: write
id-token: write
attestations: write
artifact-metadata: write
jobs:
build-native-linux-packages:
name: Build native Linux packages on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
deb_arch: amd64
rpm_arch: x86_64
arch_arch: x86_64
- os: ubuntu-24.04-arm
deb_arch: arm64
rpm_arch: aarch64
arch_arch: aarch64
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Resolve package version
id: version
shell: bash
env:
INPUT_VERSION: ${{ github.event.inputs.version }}
run: |
if [[ "${GITHUB_REF:-}" == refs/tags/turtle-term-v* ]]; then
version="${GITHUB_REF_NAME#turtle-term-v}"
else
version="${INPUT_VERSION:-0.1.0-dev}"
fi
echo "version=$version" >> "$GITHUB_OUTPUT"
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install Linux build and package dependencies
run: |
sudo apt-get update -q
CI=yes ./get-deps
sudo apt-get install -y --no-install-recommends \
cpio desktop-file-utils dpkg-dev rpm zstd
- name: Build TurtleTerm runtime binaries
run: |
cargo build --release --locked -p wezterm
cargo build --release --locked -p wezterm-gui
cargo build --release --locked -p wezterm-mux-server
- name: Run TurtleTerm smoke tests
run: |
python3 assets/sourceos/tests/test_sourceos_term_smoke.py
python3 assets/sourceos/tests/test_turtle_product_identity.py
python3 assets/sourceos/tests/test_turtle_linux_desktop_identity.py
- name: Build Debian package
env:
TURTLE_TERM_VERSION: ${{ steps.version.outputs.version }}
TURTLE_TERM_DEB_ARCH: ${{ matrix.deb_arch }}
TURTLE_TERM_OUT_DIR: ${{ github.workspace }}/dist/native
run: bash packaging/scripts/build-deb-package.sh
- name: Build RPM package
env:
TURTLE_TERM_VERSION: ${{ steps.version.outputs.version }}
TURTLE_TERM_RPM_ARCH: ${{ matrix.rpm_arch }}
TURTLE_TERM_OUT_DIR: ${{ github.workspace }}/dist/native
run: bash packaging/scripts/build-rpm-package.sh
- name: Build Arch package
env:
TURTLE_TERM_VERSION: ${{ steps.version.outputs.version }}
TURTLE_TERM_ARCH_ARCH: ${{ matrix.arch_arch }}
TURTLE_TERM_OUT_DIR: ${{ github.workspace }}/dist/native
run: bash packaging/scripts/build-arch-package.sh
- name: Verify package artifacts exist
run: |
ls -lah dist/native
test -n "$(find dist/native -name 'turtle-term_*.deb' -print -quit)"
test -n "$(find dist/native -name 'turtle-term_*.deb.sha256' -print -quit)"
test -n "$(find dist/native -name 'turtle-term_*.deb.manifest.json' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.rpm' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.rpm.sha256' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.rpm.manifest.json' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.pkg.tar.zst' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.pkg.tar.zst.sha256' -print -quit)"
test -n "$(find dist/native -name 'turtle-term-*.pkg.tar.zst.manifest.json' -print -quit)"
- name: Write native package index
env:
PACKAGE_VERSION: ${{ steps.version.outputs.version }}
run: |
python3 - <<'PY'
import json, os
from pathlib import Path
root = Path('dist/native')
packages = []
for path in sorted(root.rglob('*.manifest.json')):
data = json.loads(path.read_text())
if data.get('schema') == 'sourceos.turtle-term.native-package.manifest.v0':
packages.append(data)
if not packages:
raise SystemExit('no native package manifests found')
index = {
'schema': 'sourceos.turtle-term.native-package.index.v0',
'product': 'TurtleTerm',
'version': os.environ['PACKAGE_VERSION'],
'package_count': len(packages),
'packages': packages,
}
Path('dist/native/turtle-term-native-packages.index.json').write_text(json.dumps(index, indent=2, sort_keys=True) + '\n')
PY
sha256sum dist/native/turtle-term-native-packages.index.json > dist/native/turtle-term-native-packages.index.json.sha256
- name: Attest native Linux package artifacts
uses: actions/attest@v4
with:
subject-path: |
dist/native/turtle-term_*.deb
dist/native/turtle-term_*.deb.sha256
dist/native/turtle-term_*.deb.manifest.json
dist/native/rpmbuild/RPMS/**/*.rpm
dist/native/rpmbuild/RPMS/**/*.rpm.sha256
dist/native/rpmbuild/RPMS/**/*.rpm.manifest.json
dist/native/turtle-term-*.pkg.tar.zst
dist/native/turtle-term-*.pkg.tar.zst.sha256
dist/native/turtle-term-*.pkg.tar.zst.manifest.json
dist/native/turtle-term-native-packages.index.json
dist/native/turtle-term-native-packages.index.json.sha256
- name: Upload native package artifacts
uses: actions/upload-artifact@v4
with:
name: turtle-term-native-linux-${{ matrix.deb_arch }}
path: |
dist/native/turtle-term_*.deb
dist/native/turtle-term_*.deb.sha256
dist/native/turtle-term_*.deb.manifest.json
dist/native/rpmbuild/RPMS/**/*.rpm
dist/native/rpmbuild/RPMS/**/*.rpm.sha256
dist/native/rpmbuild/RPMS/**/*.rpm.manifest.json
dist/native/turtle-term-*.pkg.tar.zst
dist/native/turtle-term-*.pkg.tar.zst.sha256
dist/native/turtle-term-*.pkg.tar.zst.manifest.json
dist/native/turtle-term-native-packages.index.json
dist/native/turtle-term-native-packages.index.json.sha256
- name: Publish native packages to GitHub release
if: startsWith(github.ref, 'refs/tags/turtle-term-v')
uses: softprops/action-gh-release@v2
with:
files: |
dist/native/turtle-term_*.deb
dist/native/turtle-term_*.deb.sha256
dist/native/turtle-term_*.deb.manifest.json
dist/native/rpmbuild/RPMS/**/*.rpm
dist/native/rpmbuild/RPMS/**/*.rpm.sha256
dist/native/rpmbuild/RPMS/**/*.rpm.manifest.json
dist/native/turtle-term-*.pkg.tar.zst
dist/native/turtle-term-*.pkg.tar.zst.sha256
dist/native/turtle-term-*.pkg.tar.zst.manifest.json
dist/native/turtle-term-native-packages.index.json
dist/native/turtle-term-native-packages.index.json.sha256