Skip to content

change asset upload actions #281

change asset upload actions

change asset upload actions #281

Workflow file for this run

# 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 dependencies (macOS)
if: ${{ matrix.is-osx }}
run: |
brew install wget
- 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: Build for x86_64-apple-darwin (macOS)
if: ${{ matrix.is-osx }}
run: |
cargo build --release --target x86_64-apple-darwin
- name: Build for aarch64-apple-darwin (macOS)
if: ${{ matrix.is-osx }}
run: |
cargo build --release --target aarch64-apple-darwin
- 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
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 }}