Files
notedeck/.github/workflows/rust.yml
William Casarin 35dbe812b2 ci: run on older ubuntu
From guythatsits:

> Not sure if this is helpful but the reason it isn't installing in any
of the debian based is the libc6 dependency(requires 2.39, these are
both on 2.35). Looks like popos alpha apparently includes the updated
library. Had the same issue on just a barebone debian system as well.

By default, GitHub Actions uses the latest Ubuntu runner (e.g.,
ubuntu-latest), which has glibc 2.39+. Instead, we can explicitly use
ubuntu-20.04, which has glibc 2.31.

Reported-by: guythatsits
Fixes: https://github.com/damus-io/notedeck/issues/706
Changelog-Fixed: Fixed issue running binary on older debian distros
Signed-off-by: William Casarin <jb55@jb55.com>
2025-02-04 06:48:52 -08:00

262 lines
7.7 KiB
YAML

name: CI
on:
push:
branches:
- master
- ci
pull_request:
branches:
- "*"
jobs:
lint:
name: Rustfmt + Clippy
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt,clippy
- run: |
cargo fmt --all -- --check
cargo clippy
linux-test:
name: Test (Linux)
uses: ./.github/workflows/build-and-test.yml
with:
os: ubuntu-20.04
additional-setup: |
sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev
macos-test:
name: Test (macOS)
uses: ./.github/workflows/build-and-test.yml
with:
os: macos-latest
windows-test:
name: Test (Windows)
uses: ./.github/workflows/build-and-test.yml
with:
os: windows-latest
packaging:
name: rpm/deb
runs-on: ubuntu-20.04
needs: linux-test
if: github.ref_name == 'master' || github.ref_name == 'ci'
strategy:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
steps:
# Checkout the repository
- name: Checkout Code
uses: actions/checkout@v4
# Install Packaging Tools
- name: Install Packaging Tools
run: |
sudo apt-get update
if [ "${{ matrix.arch }}" != "$(uname -m)" ]; then
sudo apt-get install -y gcc-${{ matrix.arch }}-linux-gnu g++-aarch64-linux-gnu
rustup target add ${{ matrix.arch }}-unknown-linux-gnu
fi
cargo install cargo-generate-rpm cargo-deb
- name: Rust cache
uses: Swatinem/rust-cache@v2
- name: Cargo Fetch
run: cargo fetch
- name: Build Cross (${{ matrix.arch }})
if: matrix.arch != runner.arch
run: cargo build --release --target=${{ matrix.arch }}-unknown-linux-gnu
- name: Build Native (${{ matrix.arch }})
if: matrix.arch == runner.arch
run: cargo build --release
- name: Build RPM (Cross)
if: matrix.arch != runner.arch
run: cargo generate-rpm -p crates/notedeck_chrome --target=${{ matrix.arch }}-unknown-linux-gnu
- name: Build RPM
if: matrix.arch == runner.arch
run: cargo generate-rpm -p crates/notedeck_chrome
- name: Build deb (Cross)
if: matrix.arch != runner.arch
run: cargo deb -p notedeck_chrome --target=${{ matrix.arch }}-unknown-linux-gnu
- name: Build deb
if: matrix.arch == runner.arch
run: cargo deb -p notedeck_chrome
- name: Upload RPM
uses: actions/upload-artifact@v4
if: runner.arch == matrix.arch
with:
name: notedeck-${{ matrix.arch }}.rpm
path: target/release/generate-rpm/notedeck.rpm
- name: Upload RPM (Cross)
uses: actions/upload-artifact@v4
if: runner.arch != matrix.arch
with:
name: notedeck-${{ matrix.arch }}.rpm
path: target/${{ matrix.arch }}-unknown-linux-gnu/generate-rpm/*.rpm
- name: Upload deb (Native)
uses: actions/upload-artifact@v4
if: runner.arch == matrix.arch
with:
name: notedeck-${{ matrix.arch }}.deb
path: target/release/debian/notedeck.deb
# Upload Debian Package (Cross)
- name: Upload deb (Cross)
uses: actions/upload-artifact@v4
if: runner.arch != matrix.arch
with:
name: notedeck-${{ matrix.arch }}.deb
path: target/${{ matrix.arch }}-unknown-linux-gnu/debian/*.deb
macos-dmg:
name: macOS dmg
runs-on: macos-latest
needs: macos-test
if: github.ref_name == 'master' || github.ref_name == 'ci'
env:
NOTEDECK_APPLE_RELEASE_CERT_ID: ${{ secrets.NOTEDECK_APPLE_RELEASE_CERT_ID }}
NOTEDECK_RELEASE_APPLE_ID: ${{ secrets.NOTEDECK_RELEASE_APPLE_ID }}
NOTEDECK_APPLE_APP_SPECIFIC_PW: ${{ secrets.NOTEDECK_APPLE_APP_SPECIFIC_PW }}
NOTEDECK_APPLE_TEAM_ID: ${{ secrets.NOTEDECK_APPLE_TEAM_ID }}
strategy:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
steps:
# Checkout the repository
- name: Checkout Code
uses: actions/checkout@v4
- name: Install Required Tools
run: |
brew install create-dmg
cargo install cargo-bundle
rustup target add ${{ matrix.arch }}-apple-darwin
- name: Import apple codesign cert
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
- name: Rust cache
uses: Swatinem/rust-cache@v2
- name: Run macOS DMG Build Script
run: ARCH=${{ matrix.arch }} ./scripts/macos_build.sh
- name: Upload DMG Artifact
uses: actions/upload-artifact@v4
with:
name: notedeck-${{ matrix.arch }}.dmg
path: packages/notedeck-${{ matrix.arch }}.dmg
windows-installer:
name: Windows Installer
runs-on: windows-latest
needs: windows-test
if: github.ref_name == 'master' || github.ref_name == 'ci'
strategy:
fail-fast: false
matrix:
arch: [x86_64, aarch64]
steps:
# Checkout the repository
- name: Checkout Code
uses: actions/checkout@v4
# Build cache
- name: Rust cache
uses: Swatinem/rust-cache@v2
# Build
- name: Build (Native Only)
run: cargo build --release
# Create packages directory
- name: Create packages directory
run: mkdir packages
# Install Inno Setup
- name: Install Inno Setup
run: choco install innosetup --no-progress --yes
# Set up Rust toolchain
- name: Install Rust toolchain
run: rustup target add ${{ matrix.arch }}-pc-windows-msvc
# Build
- name: Build
shell: pwsh
run: |
$target = "${{ matrix.arch }}-pc-windows-msvc"
Write-Output "Building for target: $target"
cargo build --release --target=$target
# Generate ISS Script
- name: Generate Inno Setup Script
shell: pwsh
run: |
$arch = "${{ matrix.arch }}"
$issContent = @"
[Setup]
AppName=Damus Notedeck
AppVersion=0.1
DefaultDirName={pf}\Notedeck
DefaultGroupName=Damus Notedeck
OutputDir=..\packages\$arch
OutputBaseFilename=DamusNotedeckInstaller
Compression=lzma
SolidCompression=yes
[Files]
Source: "..\target\$arch-pc-windows-msvc\release\notedeck.exe"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\Damus Notedeck"; Filename: "{app}\notedeck.exe"
[Run]
Filename: "{app}\notedeck.exe"; Description: "Launch Damus Notedeck"; Flags: nowait postinstall skipifsilent
"@
Set-Content -Path "scripts/windows-installer-$arch.iss" -Value $issContent
# Build Installer
- name: Run Inno Setup Script
run: |
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "scripts\windows-installer-${{ matrix.arch }}.iss"
# Move output
- name: Move Inno Script outputs to architecture-specific folder
run: |
New-Item -ItemType Directory -Force -Path packages\${{ matrix.arch }}
Move-Item -Path packages\${{ matrix.arch }}\DamusNotedeckInstaller.exe -Destination packages\${{ matrix.arch }}\DamusNotedeckInstaller.exe
# Upload the installer as an artifact
- name: Upload Installer
uses: actions/upload-artifact@v4
with:
name: DamusNotedeckInstaller-${{ matrix.arch }}.exe
path: packages\${{ matrix.arch }}\DamusNotedeckInstaller.exe