2023-07-30 02:10:03 +03:00
|
|
|
name: Javascript
|
2021-02-06 00:07:05 +03:00
|
|
|
|
|
|
|
# This action works with pull requests and pushes
|
|
|
|
on:
|
|
|
|
push:
|
2022-06-30 00:18:42 +03:00
|
|
|
paths:
|
|
|
|
- web/**
|
2023-08-20 20:59:55 +03:00
|
|
|
- '!**.md'
|
|
|
|
|
2023-08-19 06:48:23 +03:00
|
|
|
pull_request:
|
2022-09-03 21:35:46 +03:00
|
|
|
paths:
|
|
|
|
- web/**
|
2023-08-20 20:59:55 +03:00
|
|
|
- '!**.md'
|
2022-06-30 00:34:37 +03:00
|
|
|
|
2021-02-06 00:07:05 +03:00
|
|
|
jobs:
|
2023-07-30 01:57:45 +03:00
|
|
|
formatting:
|
2023-07-30 02:35:08 +03:00
|
|
|
name: Code formatting
|
2021-02-06 00:07:05 +03:00
|
|
|
runs-on: ubuntu-latest
|
2022-07-11 03:07:59 +03:00
|
|
|
defaults:
|
|
|
|
run:
|
|
|
|
working-directory: ./web
|
|
|
|
|
2021-02-06 00:07:05 +03:00
|
|
|
steps:
|
2022-11-24 02:04:20 +03:00
|
|
|
- id: skip_check
|
|
|
|
uses: fkirc/skip-duplicate-actions@v5
|
|
|
|
with:
|
|
|
|
concurrent_skipping: 'same_content_newer'
|
2023-08-20 20:59:55 +03:00
|
|
|
cancel_others: 'true'
|
|
|
|
skip_after_successful_duplicate: 'true'
|
2022-11-24 02:04:20 +03:00
|
|
|
|
2024-09-05 23:50:59 +03:00
|
|
|
- name: Check out pull request code
|
2023-10-07 23:52:25 +03:00
|
|
|
uses: actions/checkout@v4
|
2024-09-05 23:50:59 +03:00
|
|
|
if: github.event_name == 'pull_request'
|
2022-06-30 00:18:42 +03:00
|
|
|
with:
|
2022-09-05 22:33:01 +03:00
|
|
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
2024-09-15 19:25:30 +03:00
|
|
|
ref: ${{github.event.pull_request.head.ref}}
|
2024-09-05 23:50:59 +03:00
|
|
|
|
2024-09-15 15:52:20 +03:00
|
|
|
- name: Setup Nodejs
|
|
|
|
uses: actions/setup-node@v4
|
|
|
|
with:
|
2024-09-15 16:03:53 +03:00
|
|
|
node-version: '18.19.1'
|
2024-09-15 15:52:20 +03:00
|
|
|
|
2024-09-05 23:50:59 +03:00
|
|
|
- name: Check out repository code
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
if: github.event_name == 'push'
|
2022-06-30 00:18:42 +03:00
|
|
|
|
2023-07-30 01:57:45 +03:00
|
|
|
- name: Get changed files
|
2023-10-25 02:33:07 +03:00
|
|
|
id: changed-files-yaml
|
2024-09-17 18:24:24 +03:00
|
|
|
uses: tj-actions/changed-files@v45
|
2022-06-30 00:18:42 +03:00
|
|
|
with:
|
2023-10-16 20:06:00 +03:00
|
|
|
path: 'web'
|
2023-08-02 00:30:04 +03:00
|
|
|
files_ignore: |
|
|
|
|
static/**
|
|
|
|
web/next.config.js
|
2023-07-30 01:57:45 +03:00
|
|
|
files_yaml: |
|
|
|
|
src:
|
2024-07-11 21:33:07 +03:00
|
|
|
- '**/*.{js,ts,tsx,jsx,md}'
|
2022-06-30 00:18:42 +03:00
|
|
|
|
2023-07-30 02:35:08 +03:00
|
|
|
- name: Cache node modules
|
2024-03-04 05:45:28 +03:00
|
|
|
uses: actions/cache@v4
|
2023-07-30 02:35:08 +03:00
|
|
|
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 }}-
|
|
|
|
|
2022-06-30 00:18:42 +03:00
|
|
|
- name: Install Dependencies
|
2022-09-05 22:33:01 +03:00
|
|
|
run: npm install
|
2021-02-06 00:07:05 +03:00
|
|
|
|
2024-09-18 02:35:31 +03:00
|
|
|
- name: Lint and fix
|
2024-09-18 02:39:54 +03:00
|
|
|
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
|
2024-09-18 02:35:31 +03:00
|
|
|
run: npx eslint --fix ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
|
|
|
|
|
2022-06-30 00:18:42 +03:00
|
|
|
- name: Lint
|
2024-09-18 02:39:54 +03:00
|
|
|
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name == 'pull_request'
|
2023-10-25 02:28:32 +03:00
|
|
|
run: npx eslint --fix ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
|
2023-07-30 01:57:45 +03:00
|
|
|
|
2024-09-18 02:35:31 +03:00
|
|
|
- name: Prettier formatting
|
2024-09-18 02:39:54 +03:00
|
|
|
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name == 'pull_request'
|
2023-10-25 02:28:32 +03:00
|
|
|
run: npx prettier --write ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
|
2023-07-30 01:57:45 +03:00
|
|
|
|
2024-09-18 02:35:31 +03:00
|
|
|
- name: Prettier check
|
2024-09-18 02:39:54 +03:00
|
|
|
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
|
2024-09-18 02:35:31 +03:00
|
|
|
run: npx prettier ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
|
|
|
|
|
2024-04-23 04:11:31 +03:00
|
|
|
- name: Debug changed files output
|
|
|
|
run: 'pwd && echo "Changed files: ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}"'
|
|
|
|
|
2023-07-30 01:57:45 +03:00
|
|
|
- name: Commit changes
|
2024-09-18 02:39:54 +03:00
|
|
|
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
|
2023-07-30 01:57:45 +03:00
|
|
|
uses: EndBug/add-and-commit@v9
|
|
|
|
with:
|
|
|
|
author_name: Owncast
|
|
|
|
author_email: owncast@owncast.online
|
|
|
|
message: 'Javascript formatting autofixes'
|
2023-10-25 02:28:32 +03:00
|
|
|
add: ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
|
2024-04-23 04:11:31 +03:00
|
|
|
cwd: './web' # Ensure this is the correct relative directory
|
2023-07-30 01:57:45 +03:00
|
|
|
pull: '--rebase --autostash'
|
2023-05-21 07:15:25 +03:00
|
|
|
|
|
|
|
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'
|
2023-08-20 20:59:55 +03:00
|
|
|
cancel_others: 'true'
|
|
|
|
skip_after_successful_duplicate: 'true'
|
2023-05-21 07:15:25 +03:00
|
|
|
|
2024-09-05 23:50:59 +03:00
|
|
|
- name: Check out pull request code
|
2023-10-07 23:52:25 +03:00
|
|
|
uses: actions/checkout@v4
|
2024-09-05 23:50:59 +03:00
|
|
|
if: github.event_name == 'pull_request'
|
2023-05-21 07:15:25 +03:00
|
|
|
with:
|
|
|
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
2024-09-05 23:50:59 +03:00
|
|
|
|
|
|
|
- name: Check out repository code
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
if: github.event_name == 'push'
|
2023-05-21 07:15:25 +03:00
|
|
|
|
2024-09-15 15:52:20 +03:00
|
|
|
- name: Setup Nodejs
|
|
|
|
uses: actions/setup-node@v4
|
|
|
|
with:
|
2024-09-15 16:03:53 +03:00
|
|
|
node-version: '18.19.1'
|
2024-09-15 15:52:20 +03:00
|
|
|
|
2023-07-30 02:35:08 +03:00
|
|
|
- name: Cache node modules
|
2024-03-04 05:45:28 +03:00
|
|
|
uses: actions/cache@v4
|
2023-07-30 02:35:08 +03:00
|
|
|
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 }}-
|
|
|
|
|
2023-05-21 07:15:25 +03:00
|
|
|
- name: Install Dependencies
|
|
|
|
run: npm install
|
|
|
|
|
|
|
|
- name: Check for unused JS code and dependencies
|
|
|
|
run: npx knip --include dependencies,files,exports
|
2023-07-30 02:10:03 +03:00
|
|
|
|
2024-09-06 04:13:03 +03:00
|
|
|
- name: Run tests
|
|
|
|
working-directory: ./web
|
|
|
|
run: npm test
|
|
|
|
|
2023-07-30 02:10:03 +03:00
|
|
|
# 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:
|
2023-07-30 02:35:08 +03:00
|
|
|
name: Build and bundle web project
|
2023-07-30 02:10:03 +03:00
|
|
|
runs-on: ubuntu-latest
|
|
|
|
if: github.repository == 'owncast/owncast'
|
2023-08-02 00:24:45 +03:00
|
|
|
needs: [formatting, unused-code]
|
2023-07-30 02:10:03 +03:00
|
|
|
steps:
|
|
|
|
- id: skip_check
|
|
|
|
uses: fkirc/skip-duplicate-actions@v5
|
|
|
|
with:
|
|
|
|
concurrent_skipping: 'same_content_newer'
|
2023-08-19 08:32:39 +03:00
|
|
|
cancel_others: 'true'
|
|
|
|
skip_after_successful_duplicate: 'true'
|
2023-07-30 02:10:03 +03:00
|
|
|
|
2024-09-15 15:52:20 +03:00
|
|
|
- name: Setup Nodejs
|
|
|
|
uses: actions/setup-node@v4
|
|
|
|
with:
|
2024-09-15 16:03:53 +03:00
|
|
|
node-version: '18.19.1'
|
2024-09-15 15:52:20 +03:00
|
|
|
|
2023-07-30 02:10:03 +03:00
|
|
|
- name: Cache node modules
|
2024-03-04 05:45:28 +03:00
|
|
|
uses: actions/cache@v4
|
2023-07-30 02:10:03 +03:00
|
|
|
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 }}-
|
|
|
|
|
2024-09-05 23:50:59 +03:00
|
|
|
- name: Check out pull request code
|
2023-10-07 23:52:25 +03:00
|
|
|
uses: actions/checkout@v4
|
2024-09-05 23:50:59 +03:00
|
|
|
if: github.event_name == 'pull_request'
|
2023-08-03 00:04:00 +03:00
|
|
|
with:
|
|
|
|
repository: ${{ github.event.pull_request.head.repo.full_name }}
|
2024-09-05 23:50:59 +03:00
|
|
|
|
|
|
|
- name: Check out repository code
|
|
|
|
uses: actions/checkout@v4
|
|
|
|
if: github.event_name == 'push'
|
2023-08-03 00:04:00 +03:00
|
|
|
|
|
|
|
- name: Bundle web app (next.js build)
|
|
|
|
run: build/web/bundleWeb.sh
|
2023-07-30 02:10:03 +03:00
|
|
|
|
2023-08-13 03:48:30 +03:00
|
|
|
- name: Rebase
|
|
|
|
if: ${{ github.ref == 'refs/heads/develop' }}
|
|
|
|
run: |
|
2023-08-17 03:21:31 +03:00
|
|
|
git add static/web
|
2023-08-13 03:48:30 +03:00
|
|
|
git pull --rebase --autostash
|
|
|
|
|
2023-07-30 02:35:08 +03:00
|
|
|
# Only commit built web project files on develop.
|
2023-07-30 02:10:03 +03:00
|
|
|
- name: Commit changes
|
2023-07-31 22:02:19 +03:00
|
|
|
if: ${{ github.ref == 'refs/heads/develop' }}
|
2023-07-30 02:10:03 +03:00
|
|
|
uses: EndBug/add-and-commit@v9
|
|
|
|
with:
|
|
|
|
message: 'Bundle embedded web app'
|
|
|
|
add: 'static/web'
|
|
|
|
author_name: Owncast
|
|
|
|
author_email: owncast@owncast.online
|
2023-08-03 00:04:00 +03:00
|
|
|
|
2023-08-04 06:03:55 +03:00
|
|
|
- name: Push changes
|
|
|
|
if: ${{ github.ref == 'refs/heads/develop' }}
|
|
|
|
run: |
|
2023-08-04 05:48:27 +03:00
|
|
|
git pull --rebase --autostash
|
2023-08-03 00:04:00 +03:00
|
|
|
git push
|