diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml new file mode 100644 index 000000000..fd5a5e09b --- /dev/null +++ b/.github/workflows/changelog.yml @@ -0,0 +1,73 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Update changelog on release + +on: + push: + tags: + # Match final releases only (e.g. v33.0.1), not rc/beta/alpha + - 'v[0-9]+.[0-9]+.[0-9]+' + +permissions: + contents: read + +jobs: + update-changelog: + name: Update CHANGELOG.md + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + # Full history required for git-cliff to read all commits since last tag + fetch-depth: 0 + persist-credentials: false + + - name: Generate changelog entry + uses: orhun/git-cliff-action@v4 + with: + config: cliff.toml + args: --latest --prepend CHANGELOG.md + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OUTPUT: CHANGELOG.md + + - name: Determine target branch + id: target + run: | + TAG="${{ github.ref_name }}" + # Map vMAJOR.MINOR.PATCH to stableMAJOR or master for the latest major + MAJOR=$(echo "$TAG" | sed 's/v\([0-9]*\)\..*/\1/') + MINOR=$(echo "$TAG" | sed 's/v[0-9]*\.\([0-9]*\)\..*/\1/') + if [ "$MINOR" = "0" ]; then + echo "branch=master" >> "$GITHUB_OUTPUT" + else + echo "branch=stable${MAJOR}" >> "$GITHUB_OUTPUT" + fi + + - name: Create Pull Request + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v7.0.3 + with: + token: ${{ secrets.COMMAND_BOT_PAT }} + commit-message: 'docs: update CHANGELOG.md for ${{ github.ref_name }}' + committer: GitHub + author: nextcloud-command + signoff: true + branch: automated/noid/changelog-${{ github.ref_name }} + base: ${{ steps.target.outputs.branch }} + title: 'Update CHANGELOG.md for ${{ github.ref_name }}' + body: | + Automated changelog update for release `${{ github.ref_name }}`. + + Generated by [git-cliff](https://git-cliff.org) from conventional commits. + labels: | + documentation + 3. to review diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..439cb8dc7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,79 @@ + +# Changelog + +## v33.0.0 — 2026-02-15 + +### Added +- feat(activity): add bulk activity endpoint (#2089) +- feat: use full date and time in activity emails (#2078) +- enh: add link on emails to notification settings (#2112) + +### Changed +- refactor: adjust for Nextcloud 33 new files sidebar API (#2300) +- test: upgrade to PHPUnit 11 (#2202) + +### Fixed +- fix: rework attributes (#2355) +- fix(emails): catch server connection exceptions (#2221) +- fix: activity insert (#2218) +- fix(sendDigests): catch the case that a specified user is not existing and log instead (#2064) +- fix: remove deprecated execute method for cronjob calls (#2161) +- fix(dashboard): enable rounded icons (#2097) +- fix: use target path for unshare-from-self events (#2103) +- fix(notification): deduplicate the settings check (#2041) +- fix(FilesHooks): catch all exceptions when looking up unrelated users (#2052) +- perf: pass the node of shares around instead of getting the path from id each time (#2098) + +## v32.0.6 — 2026-02-06 + +### Fixed +- fix: rework attributes (#2355) + +## v32.0.5 — 2026-01-14 + +No user-facing changes. + +## v32.0.4 — 2026-01-14 + +No user-facing changes. + +## v32.0.3 — 2025-12-03 + +### Fixed +- fix(emails): catch server connection exceptions (#2221) + +## v32.0.2 — 2025-11-16 + +### Added +- feat(activity): add bulk activity endpoint (#2089) + +### Fixed +- fix: activity insert (#2218) + +## v32.0.1 — 2025-10-20 + +No user-facing changes. + +## v32.0.0 — 2025-09-27 + +### Added +- feat: use full date and time in activity emails (#2078) +- enh: add link on emails to notification settings (#2112) + +### Changed +- chore: migrate to Vue 3 (#2033, #2035) +- refactor: adjust nextcloud-vue props to latest version (#2034) +- test(cypress): enable test isolation (#2023) + +### Fixed +- fix: use target path for unshare-from-self events (#2103) +- fix(dashboard): enable rounded icons (#2097) +- fix(FilesHooks): catch all exceptions when looking up unrelated users (#2052) +- fix(notification): deduplicate the settings check (#2041) +- fix: don't setup the filesystem to check if a user is blocked by ACLs (#1976) +- fix: fix valid parsed check (#1981) +- fix: improving logging of invalid parameters for activity subject (#1975) +- perf: pass the node of shares around instead of getting the path from id each time (#2098) diff --git a/REUSE.toml b/REUSE.toml index a4f2a1790..4bca84014 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -6,7 +6,7 @@ SPDX-PackageSupplier = "Nextcloud " SPDX-PackageDownloadLocation = "https://github.com/nextcloud/activity" [[annotations]] -path = [".gitattributes", ".github/**", ".editorconfig", "babel.config.js", ".php-cs-fixer.dist.php", "package-lock.json", "package.json", "composer.json", "composer.lock", "README.md", "img/app.svg", "webpack.js", "stylelint.config.js", ".eslintrc.js", ".eslintrc.json", ".gitignore", ".jshintrc", ".l10nignore", "action/.gitignore", "action/package.json", "action/package-lock.json", "action/dist/index.js", "tests/**", "psalm.xml", "cypress/.env", "cypress/.eslintrc.js", "cypress/docker-compose.yml", "cypress/plugins/index.js", "cypress/tsconfig.json", "cypress.config.ts", "vendor-bin/**/composer.json", "stylelint.config.cjs", "vendor-bin/**/composer.lock", ".tx/config", "webpack.config.js", "tsconfig.json", "vite.config.ts", "js/vendor.LICENSE.txt", "src/__mocks__/@nextcloud/activity_ws.json"] +path = [".gitattributes", ".github/**", ".editorconfig", "cliff.toml", "babel.config.js", ".php-cs-fixer.dist.php", "package-lock.json", "package.json", "composer.json", "composer.lock", "README.md", "img/app.svg", "webpack.js", "stylelint.config.js", ".eslintrc.js", ".eslintrc.json", ".gitignore", ".jshintrc", ".l10nignore", "action/.gitignore", "action/package.json", "action/package-lock.json", "action/dist/index.js", "tests/**", "psalm.xml", "cypress/.env", "cypress/.eslintrc.js", "cypress/docker-compose.yml", "cypress/plugins/index.js", "cypress/tsconfig.json", "cypress.config.ts", "vendor-bin/**/composer.json", "stylelint.config.cjs", "vendor-bin/**/composer.lock", ".tx/config", "webpack.config.js", "tsconfig.json", "vite.config.ts", "js/vendor.LICENSE.txt", "src/__mocks__/@nextcloud/activity_ws.json"] precedence = "aggregate" SPDX-FileCopyrightText = "none" SPDX-License-Identifier = "CC0-1.0" diff --git a/cliff.toml b/cliff.toml new file mode 100644 index 000000000..9565e10c1 --- /dev/null +++ b/cliff.toml @@ -0,0 +1,50 @@ +[changelog] +header = """ +# Changelog\n +""" +body = """ +{% if version %}\ +## {{ version }} — {{ timestamp | date(format="%Y-%m-%d") }}\n +{% else %}\ +## Unreleased\n +{% endif %}\ +{% set ns = namespace(has_commits=false) %}\ +{% for group, commits in commits | group_by(attribute="group") %}\ +{% set ns.has_commits = true %}\ +### {{ group }}\n +{% for commit in commits %}\ +- {{ commit.message | split(pat="\n") | first | trim }}\ +{% if commit.remote.pr_number %} (#{{ commit.remote.pr_number }}){% endif %}\n\ +{% endfor %}\n\ +{% endfor %}\ +{% if not ns.has_commits %}No user-facing changes.\n{% endif %}\ +""" +trim = true +footer = "" + +[git] +conventional_commits = true +filter_unconventional = true +filter_commits = false +commit_parsers = [ + { message = "^feat", group = "Added" }, + { message = "^enh", group = "Added" }, + { message = "^fix", group = "Fixed" }, + { message = "^refactor", group = "Changed" }, + { message = "^perf", group = "Changed" }, + { message = "^docs", group = "Changed" }, + { message = "^test", skip = true }, + { message = "^chore", skip = true }, + { message = "^build", skip = true }, + { message = "^ci", skip = true }, + { message = "^l10n", skip = true }, + { message = "^style", skip = true }, +] +tag_pattern = "v[0-9]+\\.[0-9]+\\.[0-9]+$" + +[remote.github] +owner = "nextcloud" +repo = "activity"