123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- name: Javascript
- # This action works with pull requests and pushes
- on:
- push:
- paths:
- - web/**
- - '!**.md'
- pull_request:
- paths:
- - web/**
- - '!**.md'
- jobs:
- formatting:
- name: Code formatting
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: ./web
- steps:
- - id: skip_check
- uses: fkirc/skip-duplicate-actions@v5
- with:
- concurrent_skipping: 'same_content_newer'
- cancel_others: 'true'
- skip_after_successful_duplicate: 'true'
- - name: Checkout
- uses: actions/checkout@v4
- with:
- # Make sure the actual branch is checked out when running on pull requests
- ref: ${{ github.event.pull_request.head.ref }}
- repository: ${{ github.event.pull_request.head.repo.full_name }}
- fetch-depth: 0
- persist-credentials: true
- - name: Get changed files
- id: changed-files-yaml
- uses: tj-actions/changed-files@v40
- with:
- path: 'web'
- files_ignore: |
- static/**
- web/next.config.js
- files_yaml: |
- src:
- - '**/*.{js,ts,tsx,jsx,css,md}'
- - name: Cache node modules
- uses: actions/cache@v3
- env:
- cache-name: cache-node-modules-bundle-web-app
- with:
- path: ~/.npm
- key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('web/package-lock.json') }}
- restore-keys: |
- ${{ runner.os }}-build-${{ env.cache-name }}-
- ${{ runner.os }}-build-
- ${{ runner.os }}-
- - name: Install Dependencies
- run: npm install
- - name: Lint
- if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
- run: npx eslint --fix ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- - name: Prettier
- if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
- run: npx prettier --write ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- - name: Commit changes
- if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
- uses: EndBug/add-and-commit@v9
- with:
- author_name: Owncast
- author_email: owncast@owncast.online
- message: 'Javascript formatting autofixes'
- add: ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- pull: '--rebase --autostash'
- unused-code:
- name: Test for unused code
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: ./web
- steps:
- - id: skip_check
- uses: fkirc/skip-duplicate-actions@v5
- with:
- concurrent_skipping: 'same_content_newer'
- cancel_others: 'true'
- skip_after_successful_duplicate: 'true'
- - name: Checkout
- uses: actions/checkout@v4
- with:
- # Make sure the actual branch is checked out when running on pull requests
- ref: ${{ github.event.pull_request.head.ref }}
- repository: ${{ github.event.pull_request.head.repo.full_name }}
- fetch-depth: 0
- - name: Cache node modules
- uses: actions/cache@v3
- env:
- cache-name: cache-node-modules-bundle-web-app
- with:
- path: ~/.npm
- key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('web/package-lock.json') }}
- restore-keys: |
- ${{ runner.os }}-build-${{ env.cache-name }}-
- ${{ runner.os }}-build-
- ${{ runner.os }}-
- - name: Install Dependencies
- run: npm install
- - name: Check for unused JS code and dependencies
- run: npx knip --include dependencies,files,exports
- # After any formatting and linting is complete we can run the build
- # and bundle step. This both will verify that the build is successful as
- # well as commiting the updated static files into the repository for use.
- web-bundle:
- name: Build and bundle web project
- runs-on: ubuntu-latest
- if: github.repository == 'owncast/owncast'
- needs: [formatting, unused-code]
- steps:
- - id: skip_check
- uses: fkirc/skip-duplicate-actions@v5
- with:
- concurrent_skipping: 'same_content_newer'
- cancel_others: 'true'
- skip_after_successful_duplicate: 'true'
- - name: Cache node modules
- uses: actions/cache@v3
- env:
- cache-name: cache-node-modules-bundle-web-app
- with:
- path: ~/.npm
- key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('web/package-lock.json') }}
- restore-keys: |
- ${{ runner.os }}-build-${{ env.cache-name }}-
- ${{ runner.os }}-build-
- ${{ runner.os }}-
- - name: Checkout
- uses: actions/checkout@v4
- with:
- # Make sure the actual branch is checked out when running on pull requests
- ref: ${{ github.event.pull_request.head.ref }}
- repository: ${{ github.event.pull_request.head.repo.full_name }}
- fetch-depth: 0
- - name: Bundle web app (next.js build)
- run: build/web/bundleWeb.sh
- - name: Rebase
- if: ${{ github.ref == 'refs/heads/develop' }}
- run: |
- git add static/web
- git pull --rebase --autostash
- # Only commit built web project files on develop.
- - name: Commit changes
- if: ${{ github.ref == 'refs/heads/develop' }}
- uses: EndBug/add-and-commit@v9
- with:
- message: 'Bundle embedded web app'
- add: 'static/web'
- author_name: Owncast
- author_email: owncast@owncast.online
- - name: Push changes
- if: ${{ github.ref == 'refs/heads/develop' }}
- run: |
- git pull --rebase --autostash
- git push
|