Use absolute instead of canonicalize for better Windows path handling #2098
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: 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@v3 | |
- uses: Swatinem/rust-cache@v2 | |
- 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 | |
run: | | |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -v " --preset ultrafast" --target-quality 95 -o "95.mkv" --log-file 95 | |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -v " --preset ultrafast" --target-quality 80 -o "80.mkv" --log-file 80 | |
du -h 95.mkv 80.mkv | |
# compare the size of the two files to make sure 95.mkv is larger than 80.mkv | |
if [ $(stat -c%s "95.mkv") -gt $(stat -c%s "80.mkv") ]; then echo "Target quality is working correctly"; else echo "95.mkv is smaller than 80.mkv"; cat 95.log 80.log; exit 1; fi | |
- 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@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Cache Docker layers | |
uses: actions/cache@v3 | |
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@v4 | |
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 | |
# Job to output if docker-publish should run or not based on if DOCKERHUB_USERNAME and DOCKERHUB_TOKEN are set | |
publish-check: | |
runs-on: ubuntu-latest | |
outputs: | |
should_publish: ${{ steps.publish_check.outputs.should_publish }} | |
steps: | |
- name: Check for DOCKERHUB_USERNAME and DOCKERHUB_TOKEN | |
id: publish_check | |
run: | | |
if [ -z ${{ secrets.DOCKERHUB_USERNAME }} ] || [ -z ${{ secrets.DOCKERHUB_TOKEN }} ]; then | |
echo "should_publish=false" >> $GITHUB_OUTPUT | |
else | |
echo "should_publish=true" >> $GITHUB_OUTPUT | |
fi | |
docker-publish: | |
needs: [all-tests, docker, publish-check] | |
runs-on: ubuntu-latest | |
if: needs.publish-check.outputs.should_publish == 'true' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Docker meta | |
id: docker_meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ${{ secrets.DOCKERHUB_USERNAME }}/av1an | |
tags: | | |
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }} | |
type=ref,event=branch | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
type=semver,pattern={{major}} | |
type=sha | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Cache Docker layers | |
uses: actions/cache@v3 | |
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@v4 | |
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 }} |