Av1an/.github/workflows/tests.yml
Luigi311 507a6e306f
Use github cache action instead of using gha. Dedupe Dockerfile (#594)
* Action: Use local cache to speed up docker-publish

* Cleanup Dockerfile

* Dockerfile: Reduce duplication
2022-03-16 01:52:27 +00:00

322 lines
12 KiB
YAML

name: tests
on:
- push
- pull_request
env:
DEBIAN_FRONTEND: noninteractive
jobs:
all-tests:
runs-on: ubuntu-latest
container: shssoichiro/av1an-ci:latest
steps:
- uses: actions/checkout@v2
- uses: Swatinem/rust-cache@v1
- name: Validate encoders
run: |
which aomenc
which SvtAv1EncApp
which rav1e
which vpxenc
which x265
which x264
- name: Validate formatting
run: |
cargo fmt --all -- --check
- name: Build Av1an
run: |
cargo clippy --profile ci -- -D warnings
cargo build --profile ci
# 352x240 112 frames test video
- name: Download test video
run: |
curl -LO https://media.xiph.org/video/derf/y4m/tt_sif.y4m
- name: Testing unit tests
working-directory: ./av1an-core
run: |
cargo test --profile ci
# The baseline tests should not include the faster default params, because we want to also test that
# it works without params passed
- name: Testing baseline aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline-select aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --chunk-method select
du -h tt_sif.mkv
- name: Testing target-quality aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality replace crf
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast --crf 0" --target-quality 95
du -h tt_sif.mkv
- name: Testing probe-slow aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing chunk_hybrid aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method hybrid
du -h tt_sif.mkv
- name: Testing chunk_select aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing chunk_ffms2 aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method ffms2
du -h tt_sif.mkv
- name: Testing chunk_lsmash aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method lsmash
du -h tt_sif.mkv
- name: Testing scenes aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -s scenes.json
du -h tt_sif.mkv
- name: Testing workers aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -w 2
du -h tt_sif.mkv
- name: Testing vmaf aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --vmaf
du -h tt_sif.mkv
- name: Testing extra_splits aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -x 10
du -h tt_sif.mkv
- name: Testing temp aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --temp temporary
du -h tt_sif.mkv
- name: Testing concat mkvmerge aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -c mkvmerge
du -h tt_sif.mkv
- name: Testing slow scenechange aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -c mkvmerge
du -h tt_sif.mkv
- name: Testing sc-only
run: |
target/ci/av1an -i tt_sif.y4m --sc-only --sc-method fast -s "tt_sif_scenes.json"
du -h tt_sif_scenes.json
continue-on-error: true
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- 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: Build
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: false
tags: av1an:action
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
- name: Move cache
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
docker-publish:
needs: [all-tests, docker]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Docker meta
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v1
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/av1an # list of Docker images to use as base name for tags
tag-sha: true # add git short SHA as Docker tag
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- 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: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=local,src=/tmp/.buildx-cache
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}