mirror of
https://github.com/datarhei/core.git
synced 2025-09-27 04:16:25 +08:00
Merge branch 'dev' into srt
This commit is contained in:
62
.github/workflows/build_base_alpine.yaml
vendored
Normal file
62
.github/workflows/build_base_alpine.yaml
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
name: 'Build base:alpine-core'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.alpine.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
build-args: |
|
||||||
|
BUILD_IMAGE=${{ env.OS_NAME }}:${{ env.OS_VERSION }}
|
||||||
|
GOLANG_IMAGE=${{ env.GOLANG_IMAGE }}
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
datarhei/base:${{ env.OS_NAME }}-core-latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
83
.github/workflows/build_base_alpine_dev.yaml
vendored
Normal file
83
.github/workflows/build_base_alpine_dev.yaml
vendored
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
name: 'Build base:alpine-core:dev'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
workflow_call:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
branch:
|
||||||
|
- dev
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
ref: ${{ matrix.branch }}
|
||||||
|
|
||||||
|
- uses: actions-ecosystem/action-get-latest-tag@v1
|
||||||
|
id: get-latest-tag
|
||||||
|
with:
|
||||||
|
semver_only: true
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.alpine.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
datarhei/base
|
||||||
|
tags: |
|
||||||
|
type=raw,value=${{ env.OS_NAME }}-core-dev,enable=${{ matrix.branch == 'dev' }}
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
build-args: |
|
||||||
|
BUILD_IMAGE=${{ env.OS_NAME }}:${{ env.OS_VERSION }}
|
||||||
|
GOLANG_IMAGE=${{ env.GOLANG_IMAGE }}
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: true
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
62
.github/workflows/build_base_ubuntu.yaml
vendored
Normal file
62
.github/workflows/build_base_ubuntu.yaml
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
name: 'Build base:ubuntu-core'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.ubuntu.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
build-args: |
|
||||||
|
BUILD_IMAGE=${{ env.OS_NAME }}:${{ env.OS_VERSION }}
|
||||||
|
GOLANG_IMAGE=${{ env.GOLANG_IMAGE }}
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
datarhei/base:${{ env.OS_NAME }}-core-latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
71
.github/workflows/build_bundle-cuda.yaml
vendored
Normal file
71
.github/workflows/build_bundle-cuda.yaml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: 'Build core:cuda'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '7 5 * * *'
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.ubuntu.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.bundle.cuda.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile.bundle
|
||||||
|
build-args: |
|
||||||
|
CORE_IMAGE=datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
FFMPEG_IMAGE=datarhei/base:${{ env.OS_NAME }}-ffmpeg-cuda-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}-${{ env.CUDA_VERSION }}
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/core:cuda-${{ env.CORE_VERSION }}
|
||||||
|
datarhei/core:cuda-latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
71
.github/workflows/build_bundle-rpi.yaml
vendored
Normal file
71
.github/workflows/build_bundle-rpi.yaml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: 'Build core:rpi'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '7 5 * * *'
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.alpine.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.bundle.rpi.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile.bundle
|
||||||
|
build-args: |
|
||||||
|
CORE_IMAGE=datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
FFMPEG_IMAGE=datarhei/base:${{ env.OS_NAME }}-ffmpeg-rpi-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}
|
||||||
|
platforms: linux/arm/v7, linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/core:rpi-${{ env.CORE_VERSION }}
|
||||||
|
datarhei/core:rpi-latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
71
.github/workflows/build_bundle-vaapi.yaml
vendored
Normal file
71
.github/workflows/build_bundle-vaapi.yaml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: 'Build core:vaapi'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '7 5 * * *'
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.alpine.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.bundle.vaapi.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile.bundle
|
||||||
|
build-args: |
|
||||||
|
CORE_IMAGE=datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
FFMPEG_IMAGE=datarhei/base:${{ env.OS_NAME }}-ffmpeg-vaapi-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}
|
||||||
|
platforms: linux/amd64
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/core:vaapi-${{ env.CORE_VERSION }}
|
||||||
|
datarhei/core:vaapi-latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
71
.github/workflows/build_bundle.yaml
vendored
Normal file
71
.github/workflows/build_bundle.yaml
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
name: 'Build core'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '7 5 * * *'
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.alpine.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- uses: cardinalby/export-env-action@v1
|
||||||
|
with:
|
||||||
|
envFile: '.github_build/Build.bundle.env'
|
||||||
|
export: 'true'
|
||||||
|
expandWithJobEnv: 'true'
|
||||||
|
expand: 'true'
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build Multi-Arch
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile.bundle
|
||||||
|
build-args: |
|
||||||
|
CORE_IMAGE=datarhei/base:${{ env.OS_NAME }}-core-${{ env.OS_VERSION }}-${{ env.CORE_VERSION }}
|
||||||
|
FFMPEG_IMAGE=datarhei/base:${{ env.OS_NAME }}-ffmpeg-${{ env.OS_VERSION }}-${{ env.FFMPEG_VERSION }}
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
datarhei/core:${{ env.CORE_VERSION }}
|
||||||
|
datarhei/core:latest
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new
|
5
.github_build/Build.alpine.env
Normal file
5
.github_build/Build.alpine.env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# CORE ALPINE BASE IMAGE
|
||||||
|
OS_NAME=alpine
|
||||||
|
OS_VERSION=3.15
|
||||||
|
GOLANG_IMAGE=golang:1.18.2-alpine3.15
|
||||||
|
CORE_VERSION=16.8.0
|
3
.github_build/Build.bundle.cuda.env
Normal file
3
.github_build/Build.bundle.cuda.env
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# CORE NVIDIA CUDA BUNDLE
|
||||||
|
FFMPEG_VERSION=4.4.2
|
||||||
|
CUDA_VERSION=11.4.2
|
2
.github_build/Build.bundle.env
Normal file
2
.github_build/Build.bundle.env
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# CORE BUNDLE
|
||||||
|
FFMPEG_VERSION=4.4.2
|
2
.github_build/Build.bundle.rpi.env
Normal file
2
.github_build/Build.bundle.rpi.env
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# CORE RASPBERRY-PI BUNDLE
|
||||||
|
FFMPEG_VERSION=4.4.2
|
2
.github_build/Build.bundle.vaapi.env
Normal file
2
.github_build/Build.bundle.vaapi.env
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# CORE BUNDLE
|
||||||
|
FFMPEG_VERSION=4.4.2
|
5
.github_build/Build.ubuntu.env
Normal file
5
.github_build/Build.ubuntu.env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
# CORE UBUNTU BASE IMAGE
|
||||||
|
OS_NAME=ubuntu
|
||||||
|
OS_VERSION=20.04
|
||||||
|
GOLANG_IMAGE=golang:1.18.2-alpine3.15
|
||||||
|
CORE_VERSION=16.8.0
|
@@ -187,7 +187,11 @@ func (h *RestreamHandler) Update(c echo.Context) error {
|
|||||||
config := process.Marshal()
|
config := process.Marshal()
|
||||||
|
|
||||||
if err := h.restream.UpdateProcess(id, config); err != nil {
|
if err := h.restream.UpdateProcess(id, config); err != nil {
|
||||||
return api.Err(http.StatusBadRequest, "Process can't be updated", "%s", err)
|
if err == restream.ErrUnknownProcess {
|
||||||
|
return api.Err(http.StatusNotFound, "Process not found: %s", id)
|
||||||
|
}
|
||||||
|
|
||||||
|
return api.Err(http.StatusBadRequest, "Process can't be updated: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
p, _ := h.getProcess(config.ID, "config")
|
p, _ := h.getProcess(config.ID, "config")
|
||||||
|
@@ -110,7 +110,39 @@ func TestUpdateProcessInvalid(t *testing.T) {
|
|||||||
mock.Request(t, http.StatusOK, router, "GET", "/"+proc.ID, nil)
|
mock.Request(t, http.StatusOK, router, "GET", "/"+proc.ID, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateProcess(t *testing.T) {
|
func TestUpdateReplaceProcess(t *testing.T) {
|
||||||
|
router, err := getDummyRestreamRouter()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
data := mock.Read(t, "./fixtures/addProcess.json")
|
||||||
|
|
||||||
|
response := mock.Request(t, http.StatusOK, router, "POST", "/", data)
|
||||||
|
|
||||||
|
mock.Validate(t, &api.ProcessConfig{}, response.Data)
|
||||||
|
|
||||||
|
update := bytes.Buffer{}
|
||||||
|
_, err = update.ReadFrom(mock.Read(t, "./fixtures/addProcess.json"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
proc := api.ProcessConfig{}
|
||||||
|
err = json.Unmarshal(update.Bytes(), &proc)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
encoded, err := json.Marshal(&proc)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
update.Reset()
|
||||||
|
_, err = update.Write(encoded)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
response = mock.Request(t, http.StatusOK, router, "PUT", "/test", &update)
|
||||||
|
|
||||||
|
mock.Validate(t, &api.ProcessConfig{}, response.Data)
|
||||||
|
|
||||||
|
mock.Request(t, http.StatusOK, router, "GET", "/test", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpdateNewProcess(t *testing.T) {
|
||||||
router, err := getDummyRestreamRouter()
|
router, err := getDummyRestreamRouter()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -128,7 +160,6 @@ func TestUpdateProcess(t *testing.T) {
|
|||||||
err = json.Unmarshal(update.Bytes(), &proc)
|
err = json.Unmarshal(update.Bytes(), &proc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// invalid address
|
|
||||||
proc.ID = "test2"
|
proc.ID = "test2"
|
||||||
|
|
||||||
encoded, err := json.Marshal(&proc)
|
encoded, err := json.Marshal(&proc)
|
||||||
@@ -146,6 +177,15 @@ func TestUpdateProcess(t *testing.T) {
|
|||||||
mock.Request(t, http.StatusOK, router, "GET", "/test2", nil)
|
mock.Request(t, http.StatusOK, router, "GET", "/test2", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUpdateNonExistentProcess(t *testing.T) {
|
||||||
|
router, err := getDummyRestreamRouter()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
data := mock.Read(t, "./fixtures/addProcess.json")
|
||||||
|
|
||||||
|
mock.Request(t, http.StatusNotFound, router, "PUT", "/test", data)
|
||||||
|
}
|
||||||
|
|
||||||
func TestRemoveUnknownProcess(t *testing.T) {
|
func TestRemoveUnknownProcess(t *testing.T) {
|
||||||
router, err := getDummyRestreamRouter()
|
router, err := getDummyRestreamRouter()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@@ -2,6 +2,7 @@ package restream
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
@@ -352,6 +353,9 @@ func (r *restream) CreatedAt() time.Time {
|
|||||||
return r.createdAt
|
return r.createdAt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ErrUnknownProcess = errors.New("unknown process")
|
||||||
|
var ErrProcessExists = errors.New("process already exists")
|
||||||
|
|
||||||
func (r *restream) AddProcess(config *app.Config) error {
|
func (r *restream) AddProcess(config *app.Config) error {
|
||||||
r.lock.RLock()
|
r.lock.RLock()
|
||||||
t, err := r.createTask(config)
|
t, err := r.createTask(config)
|
||||||
@@ -366,7 +370,7 @@ func (r *restream) AddProcess(config *app.Config) error {
|
|||||||
|
|
||||||
_, ok := r.tasks[t.id]
|
_, ok := r.tasks[t.id]
|
||||||
if ok {
|
if ok {
|
||||||
return fmt.Errorf("the process ID '%s' already exists", t.id)
|
return ErrProcessExists
|
||||||
}
|
}
|
||||||
|
|
||||||
r.tasks[t.id] = t
|
r.tasks[t.id] = t
|
||||||
@@ -841,7 +845,7 @@ func (r *restream) UpdateProcess(id string, config *app.Config) error {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
t.process.Order = task.process.Order
|
t.process.Order = task.process.Order
|
||||||
@@ -849,7 +853,7 @@ func (r *restream) UpdateProcess(id string, config *app.Config) error {
|
|||||||
if id != t.id {
|
if id != t.id {
|
||||||
_, ok := r.tasks[t.id]
|
_, ok := r.tasks[t.id]
|
||||||
if ok {
|
if ok {
|
||||||
return fmt.Errorf("the process ID '%s' already exists", t.id)
|
return ErrProcessExists
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -896,7 +900,7 @@ func (r *restream) GetProcess(id string) (*app.Process, error) {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return &app.Process{}, fmt.Errorf("unknown process ID (%s)", id)
|
return &app.Process{}, ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
process := task.process.Clone()
|
process := task.process.Clone()
|
||||||
@@ -921,7 +925,7 @@ func (r *restream) DeleteProcess(id string) error {
|
|||||||
func (r *restream) deleteProcess(id string) error {
|
func (r *restream) deleteProcess(id string) error {
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if task.process.Order != "stop" {
|
if task.process.Order != "stop" {
|
||||||
@@ -954,7 +958,7 @@ func (r *restream) StartProcess(id string) error {
|
|||||||
func (r *restream) startProcess(id string) error {
|
func (r *restream) startProcess(id string) error {
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if !task.valid {
|
if !task.valid {
|
||||||
@@ -997,7 +1001,7 @@ func (r *restream) StopProcess(id string) error {
|
|||||||
func (r *restream) stopProcess(id string) error {
|
func (r *restream) stopProcess(id string) error {
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
status := task.ffmpeg.Status()
|
status := task.ffmpeg.Status()
|
||||||
@@ -1025,7 +1029,7 @@ func (r *restream) RestartProcess(id string) error {
|
|||||||
func (r *restream) restartProcess(id string) error {
|
func (r *restream) restartProcess(id string) error {
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if !task.valid {
|
if !task.valid {
|
||||||
@@ -1058,7 +1062,7 @@ func (r *restream) ReloadProcess(id string) error {
|
|||||||
func (r *restream) reloadProcess(id string) error {
|
func (r *restream) reloadProcess(id string) error {
|
||||||
t, ok := r.tasks[id]
|
t, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
t.valid = false
|
t.valid = false
|
||||||
@@ -1122,7 +1126,7 @@ func (r *restream) GetProcessState(id string) (*app.State, error) {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return state, fmt.Errorf("unknown process ID (%s)", id)
|
return state, ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if !task.valid {
|
if !task.valid {
|
||||||
@@ -1183,7 +1187,7 @@ func (r *restream) GetProcessLog(id string) (*app.Log, error) {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return &app.Log{}, fmt.Errorf("unknown process ID (%s)", id)
|
return &app.Log{}, ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if !task.valid {
|
if !task.valid {
|
||||||
@@ -1301,7 +1305,7 @@ func (r *restream) GetPlayout(id, inputid string) (string, error) {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", fmt.Errorf("unknown process ID '%s'", id)
|
return "", ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if !task.valid {
|
if !task.valid {
|
||||||
@@ -1326,7 +1330,7 @@ func (r *restream) SetProcessMetadata(id, key string, data interface{}) error {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unknown process ID (%s)", id)
|
return ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if task.metadata == nil {
|
if task.metadata == nil {
|
||||||
@@ -1354,7 +1358,7 @@ func (r *restream) GetProcessMetadata(id, key string) (interface{}, error) {
|
|||||||
|
|
||||||
task, ok := r.tasks[id]
|
task, ok := r.tasks[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("unknown process ID '%s'", id)
|
return nil, ErrUnknownProcess
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(key) == 0 {
|
if len(key) == 0 {
|
||||||
|
Reference in New Issue
Block a user