name: tests on: push: paths-ignore: - "*.yml" - .gitignore - "*.md" pull_request: paths-ignore: - "*.yml" - .gitignore - "*.md" env: deps: tree llvm clang DEBIAN_FRONTEND: noninteractive jobs: validate: name: ${{ matrix.name }} ${{ matrix.enc }} runs-on: ubuntu-latest container: luigi311/encoders-docker:latest strategy: fail-fast: false matrix: enc: [aom, rav1e, svt-av1, vpx, x265, x264] name: [baseline, baseline-select, target-quality, probe-slow] include: - name: baseline flags: "" - name: baseline-select flags: "--chunk-method select" - name: target-quality flags: --target-quality 95 - name: probe-slow flags: --target-quality 95 --probe-slow - name: chunk_hybrid enc: aom flags: --chunk-method hybrid - name: chunk_select enc: aom flags: --chunk-method select - name: chunk_ffms2 enc: aom flags: --chunk-method ffms2 - name: chunk_lsmash enc: aom flags: --chunk-method lsmash - name: scenes enc: aom flags: -s scenes.json - name: workers enc: aom flags: -w 2 - name: vmaf enc: aom flags: --vmaf - name: extra_splits enc: aom flags: -x 10 - name: video_settings enc: aom flags: -v " --cpu-used=3 --end-usage=q --cq-level=30 --threads=8 " - name: temp enc: aom flags: --temp temporary steps: - uses: actions/checkout@v2 - name: Validate encoders run: | aomenc --help SvtAv1EncApp --help rav1e --help x265 --help || true - name: Install rust uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true profile: default default: true components: rustfmt, clippy - name: Install requirements run: | apt-get update && apt-get install -y ${{ env.deps }} - name: Run cargo check uses: actions-rs/cargo@v1 with: command: check args: --no-default-features - name: Build Av1an run: | cargo build --release --features ffmpeg_static - name: Download videos run: | for url in raw.githubusercontent.com/OpenVisualCloud/SVT-AV1-Resources/master randomderp.com; do curl -LO https://$url/video.tar.gz && break done tar xf video.tar.gz - name: Testing ${{ matrix.name }} run: | target/release/av1an -i bus_cif.y4m -e ${{ matrix.enc }} -l log_av1an --keep -o "bus_cif.mkv" ${{ matrix.flags }} du -h bus_cif.mkv tree -a - name: Cat log if: always() run: cat log_av1an.log 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: Build id: docker_build uses: docker/build-push-action@v2 with: context: . file: ./Dockerfile push: false tags: av1an:action cache-to: type=local,dest=/tmp/.buildx-cache - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} - name: Tar docker cache run: tar -cf /tmp/docker-cache.tar /tmp/.buildx-cache - name: Artifact docker cache uses: actions/upload-artifact@v2 with: name: docker-cache path: /tmp/docker-cache.tar docker-publish: needs: [validate, docker] runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' && github.event_name == 'push' steps: - name: Checkout uses: actions/checkout@v2 - uses: actions/download-artifact@v2 with: name: docker-cache path: /tmp/ - name: Extract docker cache run: tar -xf /tmp/docker-cache.tar -C / - 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: 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 }}