Build & Test #1122
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: 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 }} |