CI: Deps #161
Workflow file for this run
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: 13.0.0 | |
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 \ | |
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 | |
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 | |
- 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-web: | |
runs-on: ubuntu-latest | |
container: | |
image: ghcr.io/luigi311/tanoshi-builder:sha-2c3aeb0-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-desktop: | |
runs-on: ${{ matrix.os }} | |
needs: | |
- build-web | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
#- macos-latest | |
- windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download dist | |
uses: actions/download-artifact@v4 | |
with: | |
name: tanoshi-web | |
path: crates/tanoshi-web/dist | |
- name: Install deps (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y \ | |
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 | |
- name: Install deps (macOS) | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: brew install icu4c libarchive bzip2 lz4 zlib expat libiconv | |
- uses: ilammy/setup-nasm@v1 | |
- name: Install LLVM and Clang | |
uses: KyleMayes/[email protected] | |
with: | |
version: ${{ env.LLVM_VERSION }} | |
- 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 | |
- uses: Swatinem/rust-cache@v2 | |
- name: Install tauri-cli | |
run: cargo install tauri-cli --version ^2.0.0-rc --locked | |
- name: Build tanoshi (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
env: | |
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition" | |
run: | | |
cd crates/tanoshi-tauri | |
cargo tauri build | |
- name: Build tanoshi (macos) | |
if: ${{ matrix.os == 'macos-latest' }} | |
env: | |
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: | | |
cd crates/tanoshi-tauri | |
cargo tauri build | |
- name: Build tanoshi (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
cd crates/tanoshi-tauri | |
cargo tauri build | |
- name: Move files (linux/macOS) | |
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }} | |
run: | | |
mkdir -p builds | |
find target/release/bundle/ -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/release/bundle/msi/*.msi ${{ github.workspace }}/builds/ | |
- name: Upload dist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tanoshi-desktop-${{ matrix.os }} | |
path: ${{ github.workspace }}/builds/ | |
- 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: ${{ github.workspace }}/builds/* | |
tag: ${{ github.ref }} | |
file_glob: true | |
overwrite: true | |
build-cli: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install deps | |
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y \ | |
libssl-dev libarchive-dev build-essential \ | |
cmake 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.0-dev curl \ | |
libgtk-3-dev libappindicator3-dev patchelf librsvg2-dev \ | |
libpango1.0-dev libb2-dev | |
- name: Install LLVM and Clang | |
uses: KyleMayes/[email protected] | |
with: | |
version: ${{ env.LLVM_VERSION }} | |
- name: Install rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Build tanoshi-cli | |
env: | |
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition" | |
run: | | |
cargo build -p tanoshi-cli --release | |
- name: Copy artifact | |
run: | | |
mkdir ${{ github.workspace }}/artifact/ | |
cp ${{ github.workspace }}/target/release/tanoshi-cli ${{ github.workspace }}/artifact/ | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tanoshi-cli | |
path: ${{ github.workspace }}/artifact/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-docker-amd64: | |
runs-on: ubuntu-latest | |
env: | |
DEFAULT_VARIANT: slim | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- dockerfile: Dockerfile | |
variant: slim | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to ghcr.io | |
id: docker_login | |
continue-on-error: true | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: docker_meta_amd64 | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
# 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: Build | |
if: "${{ steps.docker_login.outcome != 'success' }}" | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ matrix.dockerfile }} | |
platforms: linux/amd64 | |
push: false | |
tags: ${{ steps.docker_meta_amd64.outputs.tags }} | |
labels: ${{ steps.docker_meta_amd64.outputs.labels }} | |
build-args: | | |
BUILD_WEB=false | |
cache-from: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache | |
cache-to: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache,mode=max | |
- name: Build Push | |
if: "${{ steps.docker_login.outcome == 'success' && steps.docker_meta_amd64.outputs.tags != '' }}" | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ matrix.dockerfile }} | |
platforms: linux/amd64 | |
push: true | |
tags: ${{ steps.docker_meta_amd64.outputs.tags }} | |
labels: ${{ steps.docker_meta_amd64.outputs.labels }} | |
build-args: | | |
BUILD_WEB=false | |
cache-from: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache | |
cache-to: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache,mode=max | |
build-docker-aarch64: | |
runs-on: [self-hosted, arm64] | |
if: ${{ github.event_name == 'push' }} | |
env: | |
DEFAULT_VARIANT: slim | |
ARCH: aarch64 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- dockerfile: Dockerfile | |
variant: slim | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to ghcr.io | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: docker_meta_aarch64 | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
# 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,suffix=-${{ matrix.variant }}-${{ env.ARCH }},enable=${{ startsWith(github.ref, 'refs/tags/') }} | |
type=raw,value=latest,suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT && startsWith(github.ref, 'refs/tags/') }} | |
type=ref,event=branch,suffix=-${{ matrix.variant }}-${{ env.ARCH }} | |
type=ref,event=branch,suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }} | |
type=ref,event=pr,suffix=-${{ matrix.variant }}-${{ env.ARCH }} | |
type=ref,event=pr,suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }} | |
type=semver,pattern={{ version }},suffix=-${{ matrix.variant }}-${{ env.ARCH }} | |
type=semver,pattern={{ version }},suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }} | |
type=semver,pattern={{ major }}.{{ minor }},suffix=-${{ matrix.variant }}-${{ env.ARCH }} | |
type=semver,pattern={{ major }}.{{ minor }},suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }} | |
type=sha,suffix=-${{ matrix.variant }}-${{ env.ARCH }} | |
type=sha,suffix=-${{ env.ARCH }},enable=${{ matrix.variant == env.DEFAULT_VARIANT }} | |
- name: Build Push | |
id: build_push | |
if: "${{ steps.docker_meta_aarch64.outputs.tags != '' }}" | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ${{ matrix.dockerfile }} | |
platforms: linux/aarch64 | |
push: true | |
tags: ${{ steps.docker_meta_aarch64.outputs.tags }} | |
labels: ${{ steps.docker_meta_aarch64.outputs.labels }} | |
build-args: | | |
BUILD_WEB=false | |
cache-from: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache-${{ env.ARCH }} | |
cache-to: type=registry,ref=ghcr.io/${{ github.actor }}/tanoshi:buildcache-${{ env.ARCH }},mode=max | |
docker-build-merge: | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'push' }} | |
env: | |
DEFAULT_VARIANT: slim | |
needs: | |
- build-docker-amd64 | |
- build-docker-aarch64 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- dockerfile: Dockerfile | |
variant: slim | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to ghcr.io | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker meta | |
id: docker_meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: | | |
# 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: Install deps | |
run: | | |
sudo apt-get update && sudo apt-get install -y jq | |
- 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 }} | |
# Use the merged tags to create a single manifest tag | |
- name: Create Combined Manifest Tag | |
id: create_combined_manifest | |
env: | |
DOCKER_CLI_ACI: "1" | |
run: | | |
for TAG in $(jq -r '.tags[]' <<< "$DOCKER_METADATA_OUTPUT_JSON"); do | |
echo "Creating manifest tag $TAG" | |
# Replace ghcr.io/${{ github.actor }} with docker.io/${{ secrets.DOCKER_USERNAME }} if DOCKER_USERNAME is set | |
if [ "${{ secrets.DOCKER_USERNAME }}" != "" ]; then | |
DOCKERHUB_TAG=$(echo "--tag $TAG" | sed "s/ghcr.io\/${{ github.actor }}/${{ secrets.DOCKER_USERNAME }}/") | |
else | |
DOCKERHUB_TAG="" | |
fi | |
docker buildx imagetools create --append "${TAG}-aarch64" --tag "${TAG}" ${DOCKERHUB_TAG} | |
done |