Skip to content

Build

Build #217

Workflow file for this run

# Copyright (c) 2023 Contributors to the Suwayomi project
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Build
env:
THEMES: '["Default", "skeleton", "wintry", "crimson", "gold-nouveau", "hamlindigo", "modern", "rocket", "sahara", "seafoam", "vintage"]'
# THEMES: '["wintry"]'
on:
workflow_dispatch:
push:
branches: ['Release']
paths-ignore:
- '**/README.md'
defaults:
run:
shell: bash
jobs:
RepoName:
runs-on: ubuntu-latest
outputs:
value: ${{ steps.RepoName.outputs.lowercase }}
steps:
- name: Get Repo Name
id: RepoName
uses: ASzc/change-string-case-action@v6
with:
string: ${{ github.repository_owner }}/${{ github.event.repository.name }}
- name: Set Repo Name
run: echo "REPO_NAME=${{ steps.RepoName.outputs.lowercase }}" >> $GITHUB_OUTPUT
ComputeThemes:
runs-on: ubuntu-latest
outputs:
value: ${{ env.THEMES }}
steps:
- name: Compute Themes
run: |
echo "value=$THEMES" >> $GITHUB_OUTPUT
GenTag:
outputs:
value: ${{steps.GenTagName.outputs.value}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Tag Name
id: GenTagName
run: |
genTag="r$(git rev-list HEAD --count)"
echo "$genTag"
echo "value=$genTag" >> $GITHUB_OUTPUT
build:
needs: GenTag
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v4
- name: Use bun 1.1.0
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install bun dependencies
run: bun i
- run: bun run build
- run: echo "${{ needs.GenTag.outputs.value }}" > ./build/revision
- run: sed -i "s@BUILD_VERSION_PLACEHOLDER@${{ needs.GenTag.outputs.value }}@" ./build/index.html
- run: bun run build-md5
- uses: actions/upload-artifact@v4
with:
name: build-files
path: |
./build/
./buildZip/md5sum
retention-days: 1
web:
needs:
- build
- GenTag
runs-on: ubuntu-latest
steps:
- name: get Build files
uses: actions/download-artifact@v4
with:
name: build-files
path: ./
- name: Generate zip
working-directory: ./build
run: zip -r Suwayomi-VUI-Web-${{ needs.GenTag.outputs.value }}.zip ./*
- name: Release
uses: softprops/action-gh-release@v1
with:
files: |
./build/Suwayomi-VUI-Web-${{ needs.GenTag.outputs.value }}.zip
./buildZip/md5sum
name: ${{ needs.GenTag.outputs.value }}
tag_name: ${{ needs.GenTag.outputs.value }}
body: ''
draft: false
prerelease: false
docker:
strategy:
# max-parallel: 1
matrix:
theme: ${{ fromJSON(needs.ComputeThemes.outputs.value) }}
needs:
- build
- GenTag
- ComputeThemes
- RepoName
runs-on: ubuntu-latest
steps:
- name: Check out Dockerfile
uses: actions/checkout@v4
with:
sparse-checkout: Dockerfile
- name: get Build files
uses: actions/download-artifact@v4
with:
name: build-files
path: ./
- name: Replace theme in the HTML files to generate differant theme builds
if: ${{ matrix.theme != '' }}
uses: richardrigutins/replace-in-files@v2
with:
files: '**/*.html'
search-text: data-theme='skeleton'
replacement-text: data-theme='${{ matrix.theme }}'
encoding: utf8
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Initialize matrix lock
if: ${{ matrix.theme != fromJson(env.THEMES)[0] }}
uses: rakles/matrix-lock@v1.0.0
with:
step: init
order: ${{ join(fromJson(env.THEMES), ',') }}
- name: Wait for matrix lock
uses: rakles/matrix-lock@v1.0.0
with:
step: wait
id: ${{ matrix.theme }}
- name: theme
id: theme
run: |
if [[ ${{ matrix.theme }} != 'Default' ]]; then
echo "value=" >> $GITHUB_OUTPUT
else
echo "value=${{ matrix.theme }}" >> $GITHUB_OUTPUT
fi
- name: Build Docker image
uses: docker/build-push-action@v5
with:
platforms: linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/386, linux/ppc64le, linux/s390x
context: .
build-args: version=${{ needs.GenTag.outputs.value }}
push: true
tags: |
ghcr.io/${{ needs.RepoName.outputs.value }}:latest${{ steps.theme.outputs.value }},
ghcr.io/${{ needs.RepoName.outputs.value }}:${{ needs.GenTag.outputs.value }}${{ steps.theme.outputs.value }},
${{ needs.RepoName.outputs.value }}:latest${{ steps.theme.outputs.value }},
${{ needs.RepoName.outputs.value }}:${{ needs.GenTag.outputs.value }}${{ steps.theme.outputs.value }},
- name: Continue matrix lock
uses: rakles/matrix-lock@v1.0.0
with:
step: continue
id: ${{ matrix.theme }}