Skip to content

Build & Test

Build & Test #1127

Workflow file for this run

name: Build & Test
on:
push:
schedule:
- cron: '0 6 * * */2' # at 6:00 every two days
workflow_dispatch:
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Find version
run: |
npm run env | grep npm_package_version >> $GITHUB_ENV
- run: |
echo Workflow triggered by event ${{ github.event_name }}
- name: Build
run: npm run build:all # does not run tests
env:
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
- name: Archive extension
uses: actions/upload-artifact@v4
with:
name: enhancer_for_nebula-${{ env.npm_package_version }}
path: |
extension-dist/
if-no-files-found: error
- name: Build V3
run: npm run clean && npm run build:all -- --configV3 true # does not run tests
env:
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
- name: Archive extension V3
uses: actions/upload-artifact@v4
with:
name: enhancer_for_nebula_v3-${{ env.npm_package_version }}
path: |
extension-dist/
if-no-files-found: error
test:
name: Test
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Find version
run: |
npm run env | grep npm_package_version >> $GITHUB_ENV
- name: Get build files
uses: actions/download-artifact@v4
with:
name: enhancer_for_nebula-${{ env.npm_package_version }}
path: |
extension-dist/
# for headfull chrome
- name: Install xvfb
run: sudo apt-get install xvfb
- name: Clear jest cache
run: npx jest --clear-cache
- name: Run all tests
run: xvfb-run --auto-servernum npm run test -- --ci
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
NEBULA_PASS: ${{ secrets.NEBULA_PASS }}
NEBULA_USER: ${{ secrets.NEBULA_USER }}
- name: Clear jest cache
run: npx jest --clear-cache
- name: Run tests on beta
run: xvfb-run --auto-servernum npm run test:ee -- --ci --passWithNoTests
continue-on-error: ${{ github.event_name != 'schedule' }}
id: betatest
env:
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
NEBULA_PASS: ${{ secrets.NEBULA_PASS }}
NEBULA_USER: ${{ secrets.NEBULA_USER }}
NEBULA_BASE: https://beta.nebula.tv
- name: Emit warning if beta test failed
if: ${{ steps.betatest.outcome == 'failure' }}
run: echo "::warning::Beta tests failed"
test_v3:
name: Test V3
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Find version
run: |
npm run env | grep npm_package_version >> $GITHUB_ENV
- name: Get build files
uses: actions/download-artifact@v4
with:
name: enhancer_for_nebula_v3-${{ env.npm_package_version }}
path: |
extension-dist/
# for headfull chrome
- name: Install xvfb
run: sudo apt-get install xvfb
- name: Clear jest cache
run: npx jest --clear-cache
- name: Run all tests
run: xvfb-run --auto-servernum npm run test -- --ci
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
NEBULA_PASS: ${{ secrets.NEBULA_PASS }}
NEBULA_USER: ${{ secrets.NEBULA_USER }}
release:
name: Release
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Find version
run: |
npm run env | grep npm_package_version >> $GITHUB_ENV
- name: Get build files
uses: actions/download-artifact@v4
with:
name: enhancer_for_nebula-${{ env.npm_package_version }}
path: |
extension-dist/
- name: Package extension
run: npx web-ext build
- name: Push to release
uses: softprops/action-gh-release@v1
with:
files: |
web-ext-artifacts/enhancer_for_nebula-${{ env.npm_package_version }}.zip
fail_on_unmatched_files: true
draft: true
name: Version ${{ env.npm_package_version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get build files
uses: actions/download-artifact@v4
with:
name: enhancer_for_nebula_v3-${{ env.npm_package_version }}
path: |
extension-dist/
- name: Package extension
run: npx web-ext build --filename '{name}-v3-{version}.zip'
- name: Push to release
uses: softprops/action-gh-release@v1
with:
files: |
web-ext-artifacts/enhancer_for_nebula-v3-${{ env.npm_package_version }}.zip
fail_on_unmatched_files: true
draft: true
name: Version ${{ env.npm_package_version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
lint:
name: Lint
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Find version
run: |
npm run env | grep npm_package_version >> $GITHUB_ENV
- name: Install grep and find
run: sudo apt-get install grep findutils
- name: Create non-minified files
run: npm run build:all -- --environment NO_MINIFY
env:
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
- name: Verify no debug artifacts
run: chmod +x .github/verify-artifacts.sh && .github/verify-artifacts.sh
shell: bash
- name: Run addon linter on non-minified
run: npm run lint:ext
- name: Get build files
uses: actions/download-artifact@v4
with:
name: enhancer_for_nebula-${{ env.npm_package_version }}
path: |
extension-dist/
- name: Verify directory structure
run: chmod +x .github/verify-dirs.sh && .github/verify-dirs.sh
shell: bash
- name: Run linters
run: npm run lint
current:
name: Build & Test for current version
runs-on: ubuntu-latest
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Install curl, jq, xvfb
run: sudo apt-get install curl jq xvfb
- name: Fetch latest tag name
run: echo "tag=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases/latest" | jq -r .tag_name)" >> $GITHUB_OUTPUT
id: tagfetch
- run: |
echo Checking out tag ${{ steps.tagfetch.outputs.tag }}
- uses: actions/checkout@v4
with:
ref: ${{ steps.tagfetch.outputs.tag }}
- name: Setup Node.js environment
uses: actions/setup-node@v4
- name: Cache pnpm modules
uses: actions/cache@v4
env:
cache-name: cache-pnpm-modules
with:
path: ~/.pnpm-store
key: pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
pnpm-
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
run_install: true
- name: Build
run: npm run build:all # does not run tests
env:
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
- uses: actions/checkout@v4
with:
clean: false
- run: pnpm install --frozen-lockfile
- name: Run all tests
run: xvfb-run --auto-servernum npm run test -- --ci
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
YT_API_KEY: ${{ secrets.YOUTUBE_KEY }}
NEBULA_PASS: ${{ secrets.NEBULA_PASS }}
NEBULA_USER: ${{ secrets.NEBULA_USER }}