Merge branch 'development' #287
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md | |
# | |
# While our "example" application has the platform-specific code, | |
# for simplicity we are compiling and testing everything on the Ubuntu environment only. | |
# For multi-OS testing see the `cross.yml` workflow. | |
on: [push, pull_request] | |
jobs: | |
check: | |
name: Check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Install stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install deps | |
run: sudo apt-get install -y wget libfuse-dev libgtk-3-dev | |
- name: Cache Cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-registry- | |
- name: Cache Cargo git repository | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/git | |
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-git- | |
- name: Cache target directory | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ runner.os }}-target-check-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-target-check- | |
- name: Run cargo check | |
run: cargo check | |
test: | |
name: Test Suite | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Install stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install deps | |
run: sudo apt-get install -y wget libfuse-dev libgtk-3-dev | |
- name: Cache Cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-registry- | |
- name: Cache Cargo git repository | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/git | |
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-git- | |
- name: Cache target directory | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ runner.os }}-target-test-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-target-test- | |
- name: Run cargo test | |
run: cargo test | |
lints: | |
name: Lints | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Install stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt, clippy | |
- name: Install deps | |
run: sudo apt-get install -y wget libfuse-dev libgtk-3-dev | |
- name: Cache Cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-registry- | |
- name: Cache Cargo git repository | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/git | |
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-git- | |
- name: Cache target directory | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ runner.os }}-target-lints-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-target-lints- | |
- name: Run cargo fmt | |
run: cargo fmt --all -- --check | |
- name: Run cargo clippy | |
run: cargo clippy -- -D warnings | |
build: | |
needs: | |
- check | |
- test | |
- lints | |
runs-on: '${{ matrix.os }}' | |
env: | |
VERSION: ${{ github.ref }} | |
REPOSITORY_NAME: 'annelid' | |
strategy: | |
matrix: | |
include: | |
- os: macos-latest | |
target: annelid-universal.macos | |
artifact-path: ./target/release/Annelid.zip | |
is-osx: 1 | |
- os: ubuntu-latest | |
target: annelid-x86_64.AppImage | |
artifact-path: ./target/appimage/annelid.AppImage | |
is-linux: 1 | |
- os: windows-latest | |
target: annelid-x86_64.win | |
artifact-path: ./target/release/annelid.exe | |
is-windows: 1 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Install stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt, clippy | |
- name: Install dependencies (Linux) | |
if: ${{ matrix.is-linux }} | |
run: | | |
sudo apt-get install -y wget libfuse-dev libgtk-3-dev | |
cargo install --force cargo-appimage | |
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-$(uname -m).AppImage -O appimagetool | |
chmod a+x appimagetool | |
- name: Install Rust targets (macOS) | |
if: ${{ matrix.is-osx }} | |
run: | | |
rustup target add x86_64-apple-darwin aarch64-apple-darwin | |
- name: Cache Cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/registry | |
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-registry- | |
- name: Cache Cargo git repository | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cargo/git | |
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-git- | |
- name: Cache target directory | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ runner.os }}-target-build-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-target-build-${{ matrix.target }}- | |
- name: Set MACOSX_DEPLOYMENT_TARGET (macOS) | |
if: ${{ matrix.is-osx }} | |
run: echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV | |
- name: Set CFLAGS and LDFLAGS for Native Code | |
if: ${{ matrix.is-osx }} | |
run: | | |
echo "CFLAGS=-mmacosx-version-min=11.0" >> $GITHUB_ENV | |
echo "LDFLAGS=-mmacosx-version-min=11.0" >> $GITHUB_ENV | |
- name: Build for x86_64-apple-darwin (macOS) | |
if: ${{ matrix.is-osx }} | |
run: | | |
cargo build --release --target x86_64-apple-darwin | |
- name: Check min version (x86) | |
if: ${{ matrix.is-osx }} | |
run: | | |
otool -l target/x86_64-apple-darwin/release/annelid | grep -A 3 LC_BUILD_VERSION | |
- name: Build for aarch64-apple-darwin (macOS) | |
if: ${{ matrix.is-osx }} | |
run: | | |
cargo build --release --target aarch64-apple-darwin | |
- name: Check min version (arm) | |
if: ${{ matrix.is-osx }} | |
run: | | |
otool -l target/aarch64-apple-darwin/release/annelid | grep -A 3 LC_BUILD_VERSION | |
- name: Create universal binary (macOS) | |
if: ${{ matrix.is-osx }} | |
run: | | |
mkdir -p target/universal/release | |
lipo -create -output target/universal/release/annelid \ | |
target/x86_64-apple-darwin/release/annelid \ | |
target/aarch64-apple-darwin/release/annelid | |
- name: Build project (Linux and Windows) | |
if: ${{ matrix.is-linux || matrix.is-windows }} | |
run: cargo build --release | |
- name: macOS bundling | |
if: ${{ matrix.is-osx }} | |
run: | | |
mkdir -p Annelid.app/Contents/MacOS | |
mkdir -p Annelid.app/Contents/Resources | |
cp target/universal/release/annelid Annelid.app/Contents/MacOS/ | |
chmod +x Annelid.app/Contents/MacOS/annelid | |
cp Info.plist Annelid.app/Contents/ | |
codesign --deep --force --sign - Annelid.app | |
lipo -info Annelid.app/Contents/MacOS/annelid | |
zip -r ./target/release/Annelid.zip Annelid.app | |
- name: Linux bundling | |
if: ${{ matrix.is-linux }} | |
run: | | |
PATH=./:$PATH cargo appimage | |
- name: Windows bundling | |
if: ${{ matrix.is-windows }} | |
run: | | |
echo "No additional bundling steps for Windows." | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.target }} | |
path: ${{ matrix.artifact-path }} | |
release: | |
if: github.ref == 'refs/heads/development' || github.ref == 'refs/heads/master' | |
needs: | |
- build | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
lfs: true | |
- id: get_repository_name | |
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_OUTPUT | |
shell: bash | |
- uses: actions/download-artifact@v4 | |
with: | |
name: annelid-universal.macos | |
path: annelid-universal.macos | |
- uses: actions/download-artifact@v4 | |
with: | |
name: annelid-x86_64.AppImage | |
path: annelid-x86_64.AppImage | |
- uses: actions/download-artifact@v4 | |
with: | |
name: annelid-x86_64.win | |
path: annelid-x86_64.win | |
- name: Display structure of downloaded files | |
run: ls -R | |
- id: get_commit_id | |
run: echo SHORT_COMMIT_ID=$(git rev-parse --short HEAD) >> $GITHUB_OUTPUT | |
shell: bash | |
- id: tag_date | |
run: echo TAG_NAME=$(date +'%Y-%m-%d')-${{ steps.get_commit_id.outputs.SHORT_COMMIT_ID }} >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Rename artifacts | |
run: | | |
mv ./annelid-universal.macos/Annelid.zip ./annelid-universal.macos/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-universal-macOS.zip | |
mv ./annelid-x86_64.AppImage/annelid.AppImage ./annelid-x86_64.AppImage/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-x86_64-linux.AppImage | |
mv ./annelid-x86_64.win/annelid.exe ./annelid-x86_64.win/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-x86_64-windows.exe | |
- name: Upload Assets to Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
draft: ${{ github.ref != 'refs/heads/master' }} | |
tag_name: ${{ steps.tag_date.outputs.TAG_NAME }} | |
name: Annelid Release ${{ steps.tag_date.outputs.TAG_NAME }} | |
prerelease: true | |
files: | | |
./annelid-universal.macos/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-universal-macOS.zip | |
./annelid-x86_64.AppImage/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-x86_64-linux.AppImage | |
./annelid-x86_64.win/Annelid-${{ steps.tag_date.outputs.TAG_NAME }}-x86_64-windows.exe | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |