Skip to content

Continuous Integration #546

Continuous Integration

Continuous Integration #546

Workflow file for this run

name: Continuous Integration
on:
merge_group:
pull_request:
branches:
- main
schedule:
- cron: '0 0 * * 0'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CN_APP_SLUG: verso-nightly
jobs:
pr-fast-check:
if: ${{ github.event_name == 'pull_request' }}
name: Pull Request Fast Check
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install Rust
uses: dsherret/rust-toolchain-file@v1
- name: Set env
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Install dependencies
run: |
sudo apt-get update
sudo apt install build-essential python3-pip ccache clang cmake curl \
g++ git gperf libdbus-1-dev libfreetype6-dev libgl1-mesa-dri \
libgles2-mesa-dev libglib2.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-good libgstreamer-plugins-good1.0-dev \
gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev \
gstreamer1.0-plugins-ugly gstreamer1.0-plugins-base \
libgstreamer-plugins-base1.0-dev gstreamer1.0-libav \
libgstrtspserver-1.0-dev gstreamer1.0-tools libges-1.0-dev \
libharfbuzz-dev liblzma-dev libunwind-dev libunwind-dev libvulkan1 \
libx11-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxmu-dev libxmu6 libegl1-mesa-dev llvm-dev m4 xorg-dev sway \
python3-mako
- name: Check
run: cargo check
build-linux:
if: ${{ github.event_name != 'pull_request' }}
name: Build [Linux]
runs-on: ubuntu-latest
env:
RUSTC_WRAPPER: sccache
CCACHE: sccache
SCCACHE_GHA_ENABLED: 'true'
WAYLAND_DISPLAY: wayland-1
WLR_BACKENDS: headless
WLR_LIBINPUT_NO_DEVICES: 1
XDG_RUNTIME_DIR: /tmp
XDG_SESSION_TYPE: wayland
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install Rust
uses: dsherret/rust-toolchain-file@v1
- name: Install flatpak dependencies
if: ${{ github.event_name == 'schedule' }}
run: |
sudo apt-get install -y flatpak flatpak-builder
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
sudo flatpak install -y --noninteractive flathub org.freedesktop.Platform//23.08
sudo flatpak install -y --noninteractive flathub org.freedesktop.Sdk//23.08
sudo flatpak install -y --noninteractive flathub org.freedesktop.Sdk.Extension.rust-stable//23.08
sudo flatpak install -y --noninteractive flathub org.freedesktop.Sdk.Extension.llvm18//23.08
- name: Set env
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Run sccache-cache
uses: Mozilla-Actions/sccache-action@v0.0.4
- name: Install dependencies for merge group test
if: ${{ github.event_name != 'schedule' }}
run: |
sudo apt-get update
sudo apt install build-essential python3-pip ccache clang cmake curl \
g++ git gperf libdbus-1-dev libfreetype6-dev libgl1-mesa-dri \
libgles2-mesa-dev libglib2.0-dev libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-good libgstreamer-plugins-good1.0-dev \
gstreamer1.0-plugins-bad libgstreamer-plugins-bad1.0-dev \
gstreamer1.0-plugins-ugly gstreamer1.0-plugins-base \
libgstreamer-plugins-base1.0-dev gstreamer1.0-libav \
libgstrtspserver-1.0-dev gstreamer1.0-tools libges-1.0-dev \
libharfbuzz-dev liblzma-dev libunwind-dev libunwind-dev libvulkan1 \
libx11-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxmu-dev libxmu6 libegl1-mesa-dev llvm-dev m4 xorg-dev sway \
python3-mako
- name: Check for merge group test
if: ${{ github.event_name != 'schedule' }}
run: |
cargo check
# - name: Test
# # Run sway(wayland compositor) in the background, winit will use it
# run: |
# sway > /dev/null 2>&1 &
# cargo test --release
- name: Fetch Verso version
if: ${{ github.event_name == 'schedule' }}
run: |
echo "VERSO_VERSION=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "verso") | .version')" >> $GITHUB_ENV
- name: Generate flatpak cargo sources
if: ${{ github.event_name == 'schedule' }}
run: |
pip3 install aiohttp toml
python3 ./flatpak-cargo-generator.py ./Cargo.lock -o cargo-sources.json
- name: Build and bundle flatpak
if: ${{ github.event_name == 'schedule' }}
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: verso_${{ env.VERSO_VERSION }}_x64.flatpak
manifest-path: org.versotile.verso.yml
cache-key: flatpak-builder-${{ github.sha }}
- name: Upload artifact
if: ${{ github.event_name == 'schedule' }}
uses: actions/upload-artifact@v4
with:
name: verso_${{ env.VERSO_VERSION }}_x64_flatpak
path: verso_${{ env.VERSO_VERSION }}_x64.flatpak
build-windows:
if: ${{ github.event_name != 'pull_request' }}
name: Build [Windows]
runs-on: windows-latest
env:
CCACHE: sccache
SCCACHE_GHA_ENABLED: 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install Rust
uses: dsherret/rust-toolchain-file@v1
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install scroop
uses: MinoruSekine/setup-scoop@v3
- name: Install dependencies
run: |
scoop install git llvm cmake curl
python -m pip install mako
- name: Run sccache-cache
uses: Mozilla-Actions/sccache-action@v0.0.4
- name: Install Cargo Packager
if: ${{ github.event_name == 'schedule' }}
run: cargo install cargo-packager
- name: Build
run: |
cargo build --release
# - name: Test
# run: |
# cargo test --release
- name: Bundle
if: ${{ github.event_name == 'schedule' }}
run: |
cargo packager --release
- name: Fetch Verso version
if: ${{ github.event_name == 'schedule' }}
run: |
echo "VERSO_VERSION=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "verso") | .version')" >> $Env:GITHUB_ENV
- name: Upload artifact
if: ${{ github.event_name == 'schedule' }}
uses: actions/upload-artifact@v4
with:
name: verso_${{ env.VERSO_VERSION }}_x64_nsis
path: target\release\verso_${{ env.VERSO_VERSION }}_x64-setup.exe
build-macos:
if: ${{ github.event_name != 'pull_request' }}
name: Build [macOS]
strategy:
fail-fast: false
matrix:
platform:
- { target: aarch64-apple-darwin, os: macos-latest, arch: aarch64 }
- { target: x86_64-apple-darwin, os: macos-13, arch: x64 }
runs-on: ${{ matrix.platform.os }}
env:
RUSTC_WRAPPER: sccache
CCACHE: sccache
SCCACHE_GHA_ENABLED: 'true'
steps:
- name: Checkout the repository
uses: actions/checkout@v4
- name: Install Rust
uses: dsherret/rust-toolchain-file@v1
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
brew install cmake
python -m pip install mako
curl https://gstreamer.freedesktop.org/data/pkg/osx/1.24.6/gstreamer-1.0-1.24.6-universal.pkg -o runtime.pkg
sudo installer -pkg runtime.pkg -target /
curl https://gstreamer.freedesktop.org/data/pkg/osx/1.24.6/gstreamer-1.0-devel-1.24.6-universal.pkg -o develop.pkg
sudo installer -pkg develop.pkg -target /
- name: Run sccache-cache
uses: Mozilla-Actions/sccache-action@v0.0.4
- name: Install Cargo Packager
if: ${{ github.event_name == 'schedule' }}
run: cargo install cargo-packager
- name: Build
run: |
export PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/bin${PATH:+:$PATH}"
export DYLD_LIBRARY_PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"
cargo build --release
# - name: Test
# run: |
# cargo test --release
- name: Bundle
if: ${{ github.event_name == 'schedule' }}
run: |
export PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/bin${PATH:+:$PATH}"
export DYLD_LIBRARY_PATH="/Library/Frameworks/GStreamer.framework/Versions/1.0/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}"
cargo packager --release
- name: Fetch Verso version
if: ${{ github.event_name == 'schedule' }}
run: |
echo "VERSO_VERSION=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "verso") | .version')" >> $GITHUB_ENV
- name: Upload artifact
if: ${{ github.event_name == 'schedule' }}
uses: actions/upload-artifact@v4
with:
name: verso_${{ env.VERSO_VERSION }}_${{ matrix.platform.arch }}_dmg
path: target/release/verso_${{ env.VERSO_VERSION }}_${{ matrix.platform.arch }}.dmg
build-result:
name: Build Result
runs-on: ubuntu-latest
if: always()
needs: ['build-macos', 'build-windows', 'build-linux']
steps:
- name: Success
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
run: exit 0
- name: Failure
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: exit 1
release-nightly:
if: ${{ github.event_name == 'schedule' }}
runs-on: ubuntu-latest
needs: ['build-macos', 'build-windows', 'build-linux']
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
- name: Fetch Verso version
run: |
echo "VERSO_VERSION=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "verso") | .version')" >> $GITHUB_ENV
echo "VERSO_RELEASE_NAME=$(cargo metadata --format-version=1 --no-deps | jq -r '.packages[] | select(.name == "verso") | .version')-$(date '+%Y%m%d')-nightly" >> $GITHUB_ENV
- name: Draft release
uses: crabnebula-dev/cloud-release@v0.1.0
id: draft
with:
command: release draft ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}
- name: Upload macOS DMG bundle (ARM)
uses: crabnebula-dev/cloud-release@v0.1.0
with:
command: release upload --file "verso_${{ env.VERSO_VERSION }}_aarch64_dmg/verso_${{ env.VERSO_VERSION }}_aarch64.dmg" ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}
- name: Upload macOS DMG bundle (Intel)
uses: crabnebula-dev/cloud-release@v0.1.0
with:
command: release upload --file "verso_${{ env.VERSO_VERSION }}_x64_dmg/verso_${{ env.VERSO_VERSION }}_x64.dmg" ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}
- name: Upload Windows NSIS installer
uses: crabnebula-dev/cloud-release@v0.1.0
with:
command: release upload --file "verso_${{ env.VERSO_VERSION }}_x64_nsis/verso_${{ env.VERSO_VERSION }}_x64-setup.exe" ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}
- name: Upload Flatpak bundle
uses: crabnebula-dev/cloud-release@v0.1.0
with:
command: release upload --file "verso_${{ env.VERSO_VERSION }}_x64_flatpak/verso_${{ env.VERSO_VERSION }}_x64.flatpak" ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}
- name: Publish release
uses: crabnebula-dev/cloud-release@v0.1.0
with:
command: release publish ${{ env.CN_APP_SLUG }} $VERSO_RELEASE_NAME
api-key: ${{ secrets.CN_API_KEY }}