Simplifies changes in the future especially for new releases of e.g. Debian/Ubuntu, and makes the definitions easier to read.
459 lines
18 KiB
YAML
459 lines
18 KiB
YAML
name: "Release Build"
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
required: true
|
|
type: string
|
|
description: 'The server and web release tag ("vX.Y.Z") or "master"'
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
Docker:
|
|
runs-on: ubuntu-22.04
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Log in to Docker Hub"
|
|
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
|
with:
|
|
username: ${{ secrets.DOCKER_USERNAME }}
|
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
|
|
- name: "Log in to the GHCR Container registry"
|
|
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ secrets.GHCR_USERNAME }}
|
|
password: ${{ secrets.GHCR_TOKEN }}
|
|
|
|
- name: "Run builder for Docker containers"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} docker
|
|
|
|
Debian:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
release:
|
|
- bullseye
|
|
- bookworm
|
|
arch:
|
|
- amd64
|
|
- arm64
|
|
- armhf
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for ${{ matrix.version }} ${{ matrix.arch }}"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} debian ${{ matrix.arch }} ${{ matrix.release }}
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/debian/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/debian/${{ matrix.arch }}/${{ matrix.release }}"
|
|
|
|
- name: "Import artifacts into reprepro -V"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: false
|
|
script: |
|
|
set -o xtrace
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
COMPONENT="main"
|
|
else
|
|
COMPONENT="unstable"
|
|
fi
|
|
# Only include the architecture-dependent deb here, as the others are done only for amd64
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedeb ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/debian/${{ matrix.arch }}/${{ matrix.release }}/*_${{ matrix.arch }}.deb || exit 1
|
|
if [[ ${{ matrix.arch }} == "amd64" ]]; then
|
|
# Only include the architecture-independent packages for amd64; the other architectures are the same and conflict
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedeb ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/debian/${{ matrix.arch }}/${{ matrix.release }}/*_all.deb || exit 1
|
|
# Only include the source DSC for amd64; the other architectures are the same and conflict
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedsc ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/debian/${{ matrix.arch }}/${{ matrix.release }}/*.dsc || exit 1
|
|
fi
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: false
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/debian/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} || exit 1
|
|
sudo mv -t /srv/repository/mirror/releases/server/debian/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }}/ /srv/incoming/${{ env.JELLYFIN_VERSION }}/debian/${{ matrix.arch }}/${{ matrix.release }}/* || exit 1
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/debian/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/repository/mirror/releases/server/debian/latest-server || exit 1
|
|
fi
|
|
|
|
Ubuntu:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
release:
|
|
- focal
|
|
- jammy
|
|
# - noble
|
|
arch:
|
|
- amd64
|
|
- arm64
|
|
- armhf
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for ${{ matrix.version }} ${{ matrix.arch }}"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} ubuntu ${{ matrix.arch }} ${{ matrix.release }}
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/ubuntu/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/ubuntu/${{ matrix.arch }}/${{ matrix.release }}"
|
|
|
|
- name: "Import artifacts into reprepro -V"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: false
|
|
script: |
|
|
set -o xtrace
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
COMPONENT="main"
|
|
else
|
|
COMPONENT="unstable"
|
|
fi
|
|
# Only include the architecture-dependent deb here, as the others are done only for amd64
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedeb ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/ubuntu/${{ matrix.arch }}/${{ matrix.release }}/*_${{ matrix.arch }}.deb || exit 1
|
|
if [[ ${{ matrix.arch }} == "amd64" ]]; then
|
|
# Only include the architecture-independent packages for amd64; the other architectures are the same and conflict
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedeb ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/ubuntu/${{ matrix.arch }}/${{ matrix.release }}/*_all.deb || exit 1
|
|
# Only include the source DSC for amd64; the other architectures are the same and conflict
|
|
sudo reprepro -V --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedsc ${{ matrix.release }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/ubuntu/${{ matrix.arch }}/${{ matrix.release }}/*.dsc || exit 1
|
|
fi
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: false
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/ubuntu/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} || exit 1
|
|
sudo mv -t /srv/repository/mirror/releases/server/ubuntu/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/ubuntu/${{ matrix.arch }}/${{ matrix.release }}/* || exit 1
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/ubuntu/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/repository/mirror/releases/server/ubuntu/latest-server || exit 1
|
|
fi
|
|
|
|
Linux:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
arch:
|
|
- amd64
|
|
- amd64-musl
|
|
- arm64
|
|
- arm64-musl
|
|
- armhf
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for ${{ matrix.arch }}"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} linux ${{ matrix.arch }}
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/linux/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/linux/${{ matrix.arch }}"
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: true
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/linux/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }}
|
|
sudo mv -t /srv/repository/mirror/releases/server/linux/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/linux/${{ matrix.arch }}/*
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/linux/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/repository/mirror/releases/server/linux/latest-server
|
|
fi
|
|
|
|
Windows:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
arch:
|
|
- amd64
|
|
- arm64
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for ${{ matrix.arch }}"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} windows ${{ matrix.arch }}
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/windows/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/windows/${{ matrix.arch }}"
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: true
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/windows/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }}
|
|
sudo mv -t /srv/repository/mirror/releases/server/windows/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/windows/${{ matrix.arch }}/*
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/windows/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/repository/mirror/releases/server/windows/latest-server
|
|
fi
|
|
|
|
MacOS:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
arch:
|
|
- amd64
|
|
- arm64
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for ${{ matrix.version }} ${{ matrix.arch }}"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} macos ${{ matrix.arch }}
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/macos/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/macos/${{ matrix.arch }}"
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: true
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/macos/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }}
|
|
sudo mv -t /srv/repository/mirror/releases/server/macos/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/macos/${{ matrix.arch }}/*
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/macos/versions/${{ env.JELLYFIN_VERSION }}/${{ matrix.arch }} /srv/repository/mirror/releases/server/macos/latest-server
|
|
fi
|
|
|
|
Portable:
|
|
runs-on: ubuntu-22.04
|
|
continue-on-error: false # true in prod, false for testing
|
|
steps:
|
|
- name: "Set dated version for unstable builds"
|
|
id: version
|
|
run: |-
|
|
if [[ ${{ inputs.version }} == "master" ]]; then
|
|
echo "JELLYFIN_VERSION=$(date +'%Y%m%d%H')" >> $GITHUB_ENV
|
|
else
|
|
echo "JELLYFIN_VERSION=${{ inputs.version }}" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: "Install dependencies"
|
|
run: |-
|
|
sudo apt-get install --yes python3-git python3-yaml
|
|
|
|
- name: "Checkout repository"
|
|
uses: actions/checkout@v3
|
|
|
|
- name: "Prepare repository"
|
|
run: |-
|
|
./checkout.py ${{ inputs.version }}
|
|
|
|
- name: "Run builder for Portable"
|
|
run: |-
|
|
sudo ./build.py ${{ env.JELLYFIN_VERSION }} portable
|
|
|
|
- name: "Upload artifacts to repository server"
|
|
uses: appleboy/scp-action@v0.1.7
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
source: "out/portable/*"
|
|
strip_components: 2
|
|
target: "/srv/incoming/${{ env.JELLYFIN_VERSION }}/portable"
|
|
|
|
- name: "Move artifacts into repository"
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: "${{ secrets.REPO_HOST }}"
|
|
username: "${{ secrets.REPO_USER }}"
|
|
key: "${{ secrets.REPO_KEY }}"
|
|
debug: false
|
|
script_stop: true
|
|
script: |
|
|
sudo mkdir -p /srv/repository/mirror/releases/server/portable/versions/${{ env.JELLYFIN_VERSION }}
|
|
sudo mv -t /srv/repository/mirror/releases/server/portable/versions/${{ env.JELLYFIN_VERSION }} /srv/incoming/${{ env.JELLYFIN_VERSION }}/portable/*
|
|
if [[ ${{ inputs.version }} != "master" ]]; then
|
|
sudo ln -s /srv/repository/mirror/releases/server/portable/versions/${{ env.JELLYFIN_VERSION }} /srv/repository/mirror/releases/server/portable/latest-server
|
|
fi
|
|
|