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@v44 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@v4 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: Debug changed files output run: 'pwd && echo "Changed files: ${{ 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 }} cwd: './web' # Ensure this is the correct relative directory 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@v4 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@v4 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