Skip to content

use hashtag icon

use hashtag icon #855

Workflow file for this run

name: CI
on:
push:
branches:
- master
- ci
pull_request:
branches:
- "*"
jobs:
lint:
name: Rustfmt + Clippy
runs-on: ubuntu-latest
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-latest
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-latest
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: 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