name: Test permissions: {} on: push: pull_request: types: [synchronize, opened] schedule: - cron: '0 3 * * 1-5' jobs: test: runs-on: ubuntu-latest services: redis: image: redis ports: - 6379:6379 postgres: image: postgres:10 ports: - 5432:5432 env: POSTGRES_USER: peertube POSTGRES_HOST_AUTH_METHOD: trust ldap: image: chocobozzz/docker-test-openldap ports: - 10389:10389 s3ninja: image: chocobozzz/s3-ninja ports: - 9444:9000 strategy: fail-fast: false matrix: test_suite: [ types-package, client, api-1, api-2, api-3, api-4, api-5, transcription, cli-plugin, lint, external-plugins ] env: PGUSER: peertube PGHOST: localhost NODE_PENDING_JOB_WAIT: 250 ENABLE_OBJECT_STORAGE_TESTS: true # Github runner IPs are blocked by youtube DISABLE_HTTP_YOUTUBE_IMPORT_TESTS: true ENABLE_FFMPEG_THUMBNAIL_PIXEL_COMPARISON_TESTS: true OBJECT_STORAGE_SCALEWAY_KEY_ID: ${{ secrets.OBJECT_STORAGE_SCALEWAY_KEY_ID }} OBJECT_STORAGE_SCALEWAY_ACCESS_KEY: ${{ secrets.OBJECT_STORAGE_SCALEWAY_ACCESS_KEY }} YOUTUBE_DL_DOWNLOAD_BEARER_TOKEN: ${{ secrets.GITHUB_TOKEN }} YOUTUBE_DL_PROXY: ${{ secrets.YOUTUBE_DL_PROXY }} steps: - uses: actions/checkout@v4 - uses: './.github/actions/reusable-prepare-peertube-build' with: node-version: '18.x' - uses: './.github/actions/reusable-prepare-peertube-run' - name: Cache fixtures uses: actions/cache@v4 with: path: | fixtures key: ${{ runner.OS }}-fixtures-${{ matrix.test_suite }}-${{ hashFiles('fixtures/*') }} restore-keys: | ${{ runner.OS }}-fixtures-${{ matrix.test_suite }}- ${{ runner.OS }}-fixtures- ${{ runner.OS }}- - name: Cache PeerTube pip directory uses: actions/cache@v4 with: path: | ~/.cache/pip key: ${{ runner.OS }}-${{ matrix.test_suite }}-pip-v1 - name: Cache Hugging Face models uses: actions/cache@v4 with: path: | ~/.cache/huggingface key: ${{ runner.OS }}-${{ matrix.test_suite }}-hugging-face-v1 - name: Set env test variable (schedule) if: github.event_name != 'schedule' run: | echo "DISABLE_HTTP_IMPORT_TESTS=true" >> $GITHUB_ENV - name: Run Test # external-plugins tests only run on schedule if: github.event_name == 'schedule' || matrix.test_suite != 'external-plugins' env: AKISMET_KEY: ${{ secrets.AKISMET_KEY }} run: npm run ci -- ${{ matrix.test_suite }} - name: Display errors if: ${{ always() }} run: | ( \ test -f dist/scripts/parse-log.js && \ NODE_ENV=test node dist/scripts/parse-log.js -l error -f artifacts/*.log \ ) || \ echo "parse-log.js script does not exist, skipping." - name: Upload logs uses: actions/upload-artifact@v4 if: failure() with: name: test-storages-${{ matrix.test_suite }} path: artifacts retention-days: 7