You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.7 KiB
188 lines
5.7 KiB
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 |
|
|
|
- name: Get changed files |
|
id: changed-files |
|
uses: tj-actions/changed-files@v39 |
|
with: |
|
files_ignore: | |
|
static/** |
|
web/next.config.js |
|
files_yaml: | |
|
src: |
|
- 'web/**.js' |
|
- 'web/**.ts' |
|
- 'web/**.tsx' |
|
- 'web/**.jsx' |
|
- 'web/**.css' |
|
- 'web/**.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.outputs.src_any_changed == 'true' |
|
run: npx eslint --fix ${{ steps.changed-files.outputs.src_all_changed_files }} |
|
|
|
- name: Prettier |
|
if: steps.changed-files.outputs.src_any_changed == 'true' |
|
run: npx prettier --write ${{ steps.changed-files.outputs.src_all_changed_files }} |
|
|
|
- name: Commit changes |
|
if: steps.changed-files.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.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
|
|
|