Merge pull request #39 from luigi311/arm_on_release #269
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
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: cargo build -p tanoshi-cli --release | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tanoshi-cli | |
path: ${{ github.workspace }}/target/release/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/release/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 | |
run: cd crates/tanoshi-web && trunk build --release | |
- 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 | |
cargo tauri build | |
if: matrix.arch != 'aarch64' || matrix.include_arm64 | |
- name: Move files (linux/macOS) | |
if: ${{ matrix.os != 'windows-latest' }} | |
run: | | |
mkdir -p builds | |
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 | |
- name: Move files (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
mkdir -p builds | |
mv target/*/bundle/msi/*.msi ${{ github.workspace }}/builds/ | |
- 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: cargo build -p tanoshi --release | |
if: matrix.arch != 'aarch64' || matrix.include_arm64 | |
- name: Upload dist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tanoshi-${{ matrix.arch }} | |
path: ${{ github.workspace }}/target/release/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 }}" |