Skip to content

CI: Dont build arm on non releases #263

CI: Dont build arm on non releases

CI: Dont build arm on non releases #263

Workflow file for this run

name: CI
on:
workflow_dispatch:
pull_request:
paths-ignore:
- .gitignore
- "*.md"
- ".github/screenshots/**"
push:
paths-ignore:
- .gitignore
- "*.md"
- ".github/screenshots/**"
env:
LLVM_VERSION: 15
UBUNTU_DEPS: |
libssl-dev libarchive-dev build-essential cmake llvm clang libicu-dev \
nettle-dev libacl1-dev liblzma-dev libzstd-dev liblz4-dev libbz2-dev \
zlib1g-dev libxml2-dev lsb-release wget software-properties-common \
libwebkit2gtk-4.1-dev curl libgtk-3-dev libappindicator3-dev patchelf \
librsvg2-dev libpango1.0-dev libsoup-3.0-dev libjavascriptcoregtk-4.1-dev \
libb2-dev
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
#- macos-latest
- windows-latest
steps:
- uses: actions/checkout@v4
- run: mkdir crates/tanoshi-web/dist
- name: Install deps (ubuntu/MacOS)
if: ${{ matrix.os != 'windows-latest' }}
run: |
if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then
sudo apt-get update && sudo apt-get install -y ${{ env.UBUNTU_DEPS }}
elif [ "${{ matrix.os }}" == "macos-latest" ]; then
brew install icu4c libarchive bzip2 lz4 zlib expat libiconv
fi
- uses: ilammy/setup-nasm@v1
- id: cache-vcpkg
name: Cache vcpkg (windows)
uses: actions/cache@v4
if: ${{ matrix.os == 'windows-latest' }}
with:
path: "C:/vcpkg/installed"
key: vcpkg-${{ matrix.os }}-
restore-keys: |
vcpkg-${{ matrix.os }}-
- name: Install deps (windows)
if: ${{ matrix.os == 'windows-latest' }}
run: |
vcpkg integrate install
vcpkg install --only-downloads libarchive:x64-windows-static-md
vcpkg install libarchive:x64-windows-static-md
- name: Install LLVM and Clang
uses: KyleMayes/[email protected]
with:
version: ${{ env.LLVM_VERSION }}
- uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.os }}"
- name: Run cargo test
env:
# Fix for macos
PKG_CONFIG_PATH: /usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libarchive/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig
run: |
cargo test
build-cli:
runs-on: ubuntu-latest
container:
image: ghcr.io/luigi311/tanoshi-builder:sha-6b8a514-slim
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
- name: Build tanoshi-cli
shell: bash
env:
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition"
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
cargo build -p tanoshi-cli --release
echo "build_dir=release" >> $GITHUB_ENV
else
cargo build -p tanoshi-cli
echo "build_dir=debug" >> $GITHUB_ENV
fi
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: tanoshi-cli
path: ${{ github.workspace }}/target/${{ env.build_dir }}/tanoshi-cli
- name: Upload binaries to GitHub Releases
if: startsWith(github.ref, 'refs/tags/')
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ env.build_dir }}/tanoshi-cli
asset_name: tanoshi-cli
tag: ${{ github.ref }}
build-web:
runs-on: ubuntu-latest
container:
image: ghcr.io/luigi311/tanoshi-builder:sha-6b8a514-slim
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
- name: Build tanoshi-web
shell: bash
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
cd crates/tanoshi-web && trunk build --release
else
cd crates/tanoshi-web && trunk build
fi
- name: Upload tanoshi-web
uses: actions/upload-artifact@v4
with:
name: tanoshi-web
path: crates/tanoshi-web/dist
build-tauri:
runs-on: ${{ matrix.runs_on }}
needs:
- build-web
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
arch: amd64
type: linux
runs_on: ubuntu-latest
- os: windows-latest
arch: amd64
type: windows
runs_on: windows-latest
- os: ubuntu-latest
arch: aarch64
type: linux
runs_on: [self-hosted, arm64]
include_arm64: ${{ startsWith(github.ref, 'refs/tags/') }}
steps:
- name: Skip arm64 build if not release
if: matrix.arch == 'aarch64' && !matrix.include_arm64
run: echo "Skipping arm64 build since it's not a release."
- uses: actions/checkout@v4
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Download dist
uses: actions/download-artifact@v4
with:
name: tanoshi-web
path: crates/tanoshi-web/dist
if: matrix.arch != 'aarch64' || matrix.include_arm64
- uses: actions-rust-lang/setup-rust-toolchain@v1
if: matrix.arch != 'aarch64' || matrix.include_arm64
- uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.type }}-${{ matrix.arch }}"
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Install deps (ubuntu)
if: (matrix.os == 'ubuntu-latest' || matrix.os == 'self-hosted') && (matrix.arch != 'aarch64' || matrix.include_arm64)
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y ${{ env.UBUNTU_DEPS }}
- name: Install deps (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: brew install icu4c libarchive bzip2 lz4 zlib expat libiconv
- uses: ilammy/setup-nasm@v1
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Install LLVM and Clang
uses: KyleMayes/[email protected]
with:
version: ${{ env.LLVM_VERSION }}
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Cache vcpkg
uses: actions/cache@v4
if: ${{ matrix.os == 'windows-latest' }}
with:
path: "C:/vcpkg/installed"
key: vcpkg-${{ matrix.os }}-
restore-keys: |
vcpkg-${{ matrix.os }}-
- name: Install deps (windows)
if: ${{ matrix.os == 'windows-latest' }}
run: |
vcpkg integrate install
vcpkg install --only-downloads libarchive:x64-windows-static-md
vcpkg install libarchive:x64-windows-static-md
- name: Install Binstall
uses: cargo-bins/cargo-binstall@main
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Install tauri-cli
run: cargo binstall [email protected] --no-confirm --locked
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Build tauri
shell: bash
env:
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition"
run: |
cd crates/tanoshi-tauri
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
cargo tauri build
else
cargo tauri build --debug
fi
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Move files
run: |
mkdir -p builds
if [[ "${{ matrix.os }}" != "windows-latest" ]]; then
find target/ -type f \( -name "*.deb" -o -name "*.AppImage" -o -name "*.dmg" \) -print0 |
while IFS= read -r -d '' file; do
mv "$file" ${{ github.workspace }}/builds/
done
else
mv target/*/bundle/msi/*.msi ${{ github.workspace }}/builds/
fi
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Upload dist
uses: actions/upload-artifact@v4
with:
name: tanoshi-app-${{ matrix.type }}-${{ matrix.arch }}
path: ${{ github.workspace }}/builds/
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Upload binaries to GitHub Releases
if: startsWith(github.ref, 'refs/tags/') && (matrix.arch != 'aarch64' || matrix.include_arm64)
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ github.workspace }}/builds/*
tag: ${{ github.ref }}
file_glob: true
overwrite: true
build-tanoshi:
runs-on: ${{ matrix.runs_on }}
needs:
- build-web
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
arch: amd64
type: linux
runs_on: ubuntu-latest
- os: ubuntu-latest
arch: aarch64
type: linux
runs_on: [self-hosted, arm64]
include_arm64: ${{ startsWith(github.ref, 'refs/tags/') }}
steps:
- name: Skip arm64 build if not release
if: matrix.arch == 'aarch64' && !matrix.include_arm64
run: echo "Skipping arm64 build since it's not a release."
- uses: actions/checkout@v4
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Download dist
uses: actions/download-artifact@v4
with:
name: tanoshi-web
path: crates/tanoshi-web/dist
if: matrix.arch != 'aarch64' || matrix.include_arm64
- uses: actions-rust-lang/setup-rust-toolchain@v1
if: matrix.arch != 'aarch64' || matrix.include_arm64
- uses: Swatinem/rust-cache@v2
with:
key: "${{ matrix.type }}-${{ matrix.arch }}"
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Install deps
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y ${{ env.UBUNTU_DEPS }}
if: matrix.arch != 'aarch64' || matrix.include_arm64
- uses: ilammy/setup-nasm@v1
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Install LLVM and Clang
uses: KyleMayes/[email protected]
with:
version: ${{ env.LLVM_VERSION }}
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Build tanoshi
shell: bash
env:
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition"
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
cargo build -p tanoshi --release
echo "build_dir=release" >> $GITHUB_ENV
else
cargo build -p tanoshi
echo "build_dir=debug" >> $GITHUB_ENV
fi
if: matrix.arch != 'aarch64' || matrix.include_arm64
- name: Upload dist
uses: actions/upload-artifact@v4
with:
name: tanoshi-${{ matrix.arch }}
path: ${{ github.workspace }}/target/${{ env.build_dir }}/tanoshi
if: matrix.arch != 'aarch64' || matrix.include_arm64
docker:
runs-on: ubuntu-latest
needs:
- build-tanoshi
env:
DEFAULT_VARIANT: slim
BUILD_PLATFORMS: ${{ startsWith(github.ref, 'refs/tags/') && 'linux/amd64,linux/arm64' || 'linux/amd64' }}
strategy:
fail-fast: false
matrix:
include:
- dockerfile: Dockerfile.CI
variant: slim
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download dist (AMD64)
uses: actions/download-artifact@v4
with:
name: tanoshi-amd64
path: linux/amd64
- name: Download dist (AARCH64)
if: startsWith(github.ref, 'refs/tags/')
uses: actions/download-artifact@v4
with:
name: tanoshi-aarch64
path: linux/arm64
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@v5
with:
images: |
${{ secrets.DOCKER_USERNAME }}/tanoshi,enable=${{ secrets.DOCKER_USERNAME != '' }}
# Do not push to ghcr.io on PRs due to permission issues, only push if the owner is luigi311 so it doesnt fail on forks
ghcr.io/${{ github.repository }},enable=${{ github.event_name != 'pull_request' && github.repository_owner == 'luigi311'}}
flavor: latest=false
tags: |
type=raw,value=latest,enable=${{ matrix.variant == env.DEFAULT_VARIANT && startsWith(github.ref, 'refs/tags/') }}
type=raw,value=latest,suffix=-${{ matrix.variant }},enable=${{ startsWith(github.ref, 'refs/tags/') }}
type=ref,event=branch,suffix=-${{ matrix.variant }}
type=ref,event=branch,enable=${{ matrix.variant == env.DEFAULT_VARIANT }}
type=ref,event=pr,suffix=-${{ matrix.variant }}
type=ref,event=pr,enable=${{ matrix.variant == env.DEFAULT_VARIANT }}
type=semver,pattern={{ version }},suffix=-${{ matrix.variant }}
type=semver,pattern={{ version }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }}
type=semver,pattern={{ major }}.{{ minor }},suffix=-${{ matrix.variant }}
type=semver,pattern={{ major }}.{{ minor }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }}
type=sha,suffix=-${{ matrix.variant }}
type=sha,enable=${{ matrix.variant == env.DEFAULT_VARIANT }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
if: "${{ env.DOCKER_USERNAME != '' }}"
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Login to GitHub Container Registry
if: "${{ steps.docker_meta.outcome == 'success' }}"
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build
id: build
if: "${{ steps.docker_meta.outputs.tags == '' }}"
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
platforms: ${{ env.BUILD_PLATFORMS }}
push: false
tags: tanoshi:action
- name: Build Push
id: build_push
if: "${{ steps.docker_meta.outputs.tags != '' }}"
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
platforms: ${{ env.BUILD_PLATFORMS }}
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
# Echo digest so users can validate their image
- name: Image digest
if: "${{ steps.docker_meta.outcome == 'success' }}"
run: echo "${{ steps.build_push.outputs.digest }}"