diff --git a/.github/workflows/node-dist-unchanged.yml b/.github/workflows/node-dist-unchanged.yml new file mode 100644 index 0000000000000..b7c524a58547d --- /dev/null +++ b/.github/workflows/node-dist-unchanged.yml @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later + +name: Check node dist files + +on: + pull_request: + + +jobs: + changed_files: + runs-on: ubuntu-latest + name: Check node dist files + permissions: + pull-requests: read + + steps: + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@dcc7a0cba800f454d79fff4b993e8c3555bcc0a8 # v45.0.7 + with: + files: dist/** + + - name: Run step if any file(s) in the dist folder change + if: steps.changed-files.outputs.any_changed == 'true' + run: | + echo "One or more files in the dist folder has changed. Do NOT commit files in there as they will be generated automatically once a pull request is merged" + echo "List all the files that have changed: ${{ steps.changed-files.outputs.all_changed_files }}" + exit 1 diff --git a/.github/workflows/node.yml b/.github/workflows/npm-build.yml similarity index 82% rename from .github/workflows/node.yml rename to .github/workflows/npm-build.yml index ff6f1a423e4e3..d51f3e5e0cf76 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/npm-build.yml @@ -6,7 +6,7 @@ # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: MIT -name: Node +name: Build Javascript on: pull_request @@ -35,17 +35,14 @@ jobs: filters: | src: - '.github/workflows/**' - - '**/src/**' - - '**/appinfo/info.xml' - - 'core/css/*' - - 'core/img/**' + - 'src/**' + - 'appinfo/info.xml' - 'package.json' - - '**/package-lock.json' + - 'package-lock.json' - 'tsconfig.json' - '**.js' - '**.ts' - '**.vue' - - 'version.php' build: runs-on: ubuntu-latest @@ -90,16 +87,17 @@ jobs: npm ci npm run build --if-present - - name: Check build changes - run: | - bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" + # Not used as we compile on CI, see update-node-dist.yml and node-dist-unchanged.yml + # - name: Check build changes + # run: | + # bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" - - name: Show changes on failure - if: failure() - run: | - git status - git --no-pager diff - exit 1 # make it red to grab attention + # - name: Show changes on failure + # if: failure() + # run: | + # git status + # git --no-pager diff + # exit 1 # make it red to grab attention summary: permissions: diff --git a/.github/workflows/update-node-dist.yml b/.github/workflows/update-node-dist.yml new file mode 100644 index 0000000000000..e37b4a5189305 --- /dev/null +++ b/.github/workflows/update-node-dist.yml @@ -0,0 +1,84 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later + +name: Update Node dist + +on: + workflow_dispatch: + push: + branches: + # implemented since 35, once branched off, add your stable branch here + - master + +permissions: + contents: write + +concurrency: + group: update-node-dist-${{ github.head_ref || github.ref || github.run_id }} + +jobs: + update-node-dist: + runs-on: ubuntu-latest + environment: update-node-dist + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + # Needed to allow force push later + persist-credentials: true + token: ${{ secrets.BOT_GITHUB_TOKEN }} + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.1 + id: versions + with: + fallbackNode: '^20' + fallbackNpm: '^9' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" + + - name: Setup git + run: | + git config --local user.email "nextcloud-command@users.noreply.github.com" + git config --local user.name "nextcloud-command" + + - name: Get last commit message if it was not a recompile + id: last_commit + run: | + { + echo 'MESSAGE<> $GITHUB_OUTPUT + + - name: Install dependencies & build + if: steps.last_commit.outputs.MESSAGE != '' + env: + CYPRESS_INSTALL_BINARY: 0 + run: | + npm ci + npm run build --if-present + + - name: Check webpack build changes + id: changes + continue-on-error: true + run: | + { + echo 'CHANGED<> "$GITHUB_OUTPUT" + + - name: Add and commit + if: steps.changes.outputs.CHANGED != '' + run: | + git add --force dist/ core/css/ + git commit --signoff -m 'chore(assets): recompile assets' + git push origin ${{ github.head_ref }}