Compare commits

..
1 Commits
Author SHA1 Message Date
github-actions[bot] 63a615b9cd v1.8.0 2026-05-07 09:48:08 +00:00
38 changed files with 3633 additions and 3073 deletions
+5 -4
View File
@@ -1,4 +1,5 @@
/.github/workflows/** @Andarist @bluwy @emmatown
/action.yml @Andarist @bluwy @emmatown
/scripts/bump.ts @Andarist @bluwy @emmatown
/scripts/release.ts @Andarist @bluwy @emmatown
/.github/workflows/** @Andarist @emmatown
/action.yml @Andarist @emmatown
/scripts/bump.ts @Andarist @emmatown
/scripts/release.ts @Andarist @emmatown
/scripts/release-pr.ts @Andarist @emmatown
+4 -14
View File
@@ -1,24 +1,14 @@
name: Setup CI
description: Setup CI
inputs:
skip-cache:
description: "Whether to skip the cache"
required: false
default: "false"
runs:
using: composite
steps:
- name: Set up pnpm
uses: pnpm/action-setup@8912a9102ac27614460f54aedde9e1e7f9aec20d # v6.0.5
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version-file: ".node-version"
package-manager-cache: ${{ inputs.skip-cache != 'true' }}
cache: ${{ inputs.skip-cache != 'true' && 'pnpm' || '' }}
cache: yarn
- name: Install dependencies
shell: bash
run: pnpm install --frozen-lockfile
run: yarn install --frozen-lockfile
-2
View File
@@ -9,5 +9,3 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
cooldown:
default-days: 7
+9 -41
View File
@@ -2,54 +2,26 @@ name: CI
on:
pull_request:
# merge queue is required so all commits on target branches trigger this workflow
# despite lack of the push event trigger here
push:
branches: [main]
merge_group:
branches:
- main
branches: [main]
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.sha }}
cancel-in-progress: true
jobs:
lint-workflows:
name: Lint workflows
runs-on: ubuntu-latest
permissions:
actions: read # only required in private repos
security-events: write # allow writing security events
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Run zizmor
uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
with:
persona: pedantic
annotations: true
advanced-security: false
test:
name: Test
timeout-minutes: 20
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: ./.github/actions/ci-setup
- name: Test
run: pnpm test
run: yarn test
typecheck:
name: Typecheck
@@ -57,22 +29,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: ./.github/actions/ci-setup
- name: Typecheck
run: pnpm typecheck
run: yarn typecheck
ci-ok:
name: CI OK
runs-on: ubuntu-latest
if: always()
needs: [lint-workflows, test, typecheck]
needs: [test, typecheck]
steps:
- name: Exit with error if some jobs are not successful
run: exit 1
if: ${{ always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }}
if: ${{ always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'skipped') || contains(needs.*.result, 'cancelled')) }}
-31
View File
@@ -1,31 +0,0 @@
name: pkg-pr-new
on: pull_request
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions: {}
jobs:
publish:
name: Publish
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: ./.github/actions/ci-setup
with:
skip-cache: true # avoid cache poisoning attacks
- name: Build
run: pnpm build
- run:
| # zizmor: ignore[use-trusted-publishing] we're not publishing to npm here
pnpm exec pkg-pr-new publish --pnpm --packageManager=pnpm --commentWithDev --commentWithSha --no-compact --no-template
+7 -23
View File
@@ -5,10 +5,7 @@ on:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
queue: max
concurrency: ${{ github.workflow }}-${{ github.ref }}
permissions: {} # each job should define its own permission explicitly
@@ -24,23 +21,17 @@ jobs:
issues: write # to post issue comments (changesets/action)
pull-requests: write # to create pull request (changesets/action)
steps:
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: ./.github/actions/ci-setup
with:
skip-cache: true # avoid cache poisoning attacks
- name: Build
run: pnpm build
run: yarn build
- name: Create or update release pull request
id: changesets
uses: ./
with:
version: pnpm bump
version: yarn bump
publish:
name: Publish
@@ -49,8 +40,6 @@ jobs:
runs-on: ubuntu-latest
environment: marketplace
timeout-minutes: 20
permissions:
contents: write # to create release and have it authored by github-actions (changesets/action)
steps:
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
id: app-token
@@ -58,21 +47,16 @@ jobs:
client-id: ${{ vars.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Check out repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: true
# we need this token to bypass the branch and tag protection rules
token: ${{ steps.app-token.outputs.token }}
- uses: ./.github/actions/ci-setup
with:
skip-cache: true # avoid cache poisoning attacks
- name: Build
run: pnpm build
run: yarn build
- name: Publish to marketplace
uses: ./
with:
publish: pnpm release
publish: yarn release
+183
View File
@@ -0,0 +1,183 @@
name: Release PR
on:
issue_comment:
types: [created]
permissions: {}
jobs:
release_check:
if: github.repository == 'changesets/action' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/release-pr')
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
pull-requests: read
steps:
- id: report_in_progress
run: |
echo "in_progress_reaction_id=$(gh api /repos/${{github.repository}}/issues/comments/${{github.event.comment.id}}/reactions -f content='eyes' --jq '.id')" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- id: parse_command
run: |
if [[ "$COMMENT_BODY" =~ ^/release-pr[[:space:]]+([0-9a-fA-F]{7,40})[[:space:]]*$ ]]
then
echo "requested_sha=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
else
echo "Expected '/release-pr <sha>' where <sha> is a 7-40 character commit SHA."
exit 1
fi
env:
COMMENT_BODY: ${{ github.event.comment.body }}
- id: check_authorization
run: |
if [[ $AUTHOR_ASSOCIATION == 'MEMBER' || $AUTHOR_ASSOCIATION == 'OWNER' || $AUTHOR_ASSOCIATION == 'COLLABORATOR' ]]
then
echo "User is authorized to release"
else
echo "User is not authorized to release"
exit 1
fi
env:
AUTHOR_ASSOCIATION: ${{ github.event.comment.author_association }}
- id: resolve_requested_sha
run: |
requested_sha=$(echo "$REQUESTED_SHA" | tr '[:upper:]' '[:lower:]')
mapfile -t matches < <(
gh api /repos/${{ github.repository }}/pulls/${{ github.event.issue.number }}/commits --paginate --jq '.[].sha' |
awk -v sha="$requested_sha" 'index(tolower($0), sha) == 1 { print $0 }'
)
if [[ ${#matches[@]} -eq 0 ]]
then
echo "Requested SHA $REQUESTED_SHA is not part of this pull request."
exit 1
fi
if [[ ${#matches[@]} -gt 1 ]]
then
echo "Requested SHA $REQUESTED_SHA is ambiguous for this pull request."
exit 1
fi
resolved_sha="${matches[0]}"
pr_head_sha=$(gh pr view ${{ github.event.issue.number }} --json headRefOid --jq '.headRefOid')
if [[ "$resolved_sha" != "$pr_head_sha" ]]
then
echo "Requested SHA $resolved_sha is not the current PR head $pr_head_sha."
exit 1
fi
echo "resolved_sha=$resolved_sha" >> "$GITHUB_OUTPUT"
echo "pr_head_sha=$pr_head_sha" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REQUESTED_SHA: ${{ steps.parse_command.outputs.requested_sha }}
- id: get_pr_head_repository
run: |
echo "head_repository=$(gh pr view ${{ github.event.issue.number }} --json headRepositoryOwner,headRepository --jq '.headRepositoryOwner.login + "/" + .headRepository.name')" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
outputs:
in_progress_reaction_id: ${{ steps.report_in_progress.outputs.in_progress_reaction_id }}
requested_sha: ${{ steps.parse_command.outputs.requested_sha }}
resolved_sha: ${{ steps.resolve_requested_sha.outputs.resolved_sha }}
pr_head_sha: ${{ steps.resolve_requested_sha.outputs.pr_head_sha }}
head_repository: ${{ steps.get_pr_head_repository.outputs.head_repository }}
release:
if: github.repository == 'changesets/action'
timeout-minutes: 20
runs-on: ubuntu-latest
needs: release_check
permissions:
contents: write
issues: write
pull-requests: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: ./.github/actions/ci-setup
- name: Fetch validated commit from pull request head repository
run: |
git remote add pr-head https://github.com/$HEAD_REPOSITORY.git
git fetch --no-tags pr-head $RESOLVED_SHA
env:
HEAD_REPOSITORY: ${{ needs.release_check.outputs.head_repository }}
RESOLVED_SHA: ${{ needs.release_check.outputs.resolved_sha }}
- name: Checkout validated commit
run: git checkout --detach $RESOLVED_SHA
env:
RESOLVED_SHA: ${{ needs.release_check.outputs.resolved_sha }}
- name: Check if Version Packages PR
id: check_version_packages
run: |
echo "version_packages=$(gh pr view ${{ github.event.issue.number }} --json headRefName --jq '.headRefName|startswith("changeset-release/")')" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Reset Version Packages PR
if: steps.check_version_packages.outputs.version_packages == 'true'
run: git reset --hard HEAD~1
- run: yarn changeset version --snapshot pr${{ github.event.issue.number }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build
run: yarn build
- name: Setup Git user
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Release snapshot version
run: yarn run release:pr
- run: gh api /repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions -f content='rocket'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: gh api -X DELETE /repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions/${{ needs.release_check.outputs.in_progress_reaction_id }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
gh pr comment ${{ github.event.issue.number }} --body "The release for \`${{ needs.release_check.outputs.resolved_sha }}\` triggered by [this comment](${{ github.event.comment.url }}) has [succeeded](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}). Published commit: [${{ github.repository }}@$(git rev-parse HEAD)](https://github.com/${{ github.repository }}/commit/$(git rev-parse HEAD))."
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
report-failure-if-needed:
needs: [release_check, release]
timeout-minutes: 2
runs-on: ubuntu-latest
if: failure() && github.repository == 'changesets/action' && (needs.release_check.result == 'failure' || needs.release.result == 'failure')
permissions:
issues: write
pull-requests: write
steps:
- run: gh api /repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions -f content='-1'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: gh api -X DELETE /repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions/${{ needs.release_check.outputs.in_progress_reaction_id }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
gh pr comment ${{ github.event.issue.number }} --body "The release for \`${{ needs.release_check.outputs.requested_sha }}\` triggered by [this comment](${{ github.event.comment.url }}) has [failed](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})."
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
-7
View File
@@ -1,7 +0,0 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 80,
"sortImports": {
"newlinesBetween": false
}
}
+1 -1
View File
@@ -1,4 +1,5 @@
{
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
@@ -6,7 +7,6 @@
"request": "launch",
"name": "Debug Current Test File",
"autoAttachChildProcesses": true,
"skipFiles": [],
"program": "${workspaceRoot}/node_modules/vitest/vitest.mjs",
"args": ["run", "${relativeFile}"],
"smartStep": true,
+1 -2
View File
@@ -1,4 +1,3 @@
{
"js/ts.tsdk.path": "node_modules/typescript/lib",
"editor.defaultFormatter": "oxc.oxc-vscode"
"typescript.tsdk": "node_modules/typescript/lib"
}
+26 -38
View File
@@ -21,7 +21,7 @@ This action for [Changesets](https://github.com/changesets/changesets) creates a
- published - A boolean value to indicate whether a publishing has happened or not
- publishedPackages - A JSON array to present the published packages. The format is `[{"name": "@xx/xx", "version": "1.2.0"}, {"name": "@xx/xy", "version": "0.8.9"}]`
### Example workflow
### Example workflow:
#### Without Publishing
@@ -43,18 +43,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v3
- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Node.js 26
uses: actions/setup-node@v6
- name: Setup Node.js 20
uses: actions/setup-node@v3
with:
node-version: 26
node-version: 20
- name: Install Dependencies
run: pnpm install --frozen-lockfile
run: yarn
- name: Create Release Pull Request
uses: changesets/action@v1
@@ -80,25 +77,22 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v3
- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Node.js 26
uses: actions/setup-node@v6
- name: Setup Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 26
node-version: 20.x
- name: Install Dependencies
run: pnpm install --frozen-lockfile
run: yarn
- name: Create Release Pull Request or Publish to npm
id: changesets
uses: changesets/action@v1
with:
# This expects you to have a script called release which does a build for your packages and calls changeset publish
publish: pnpm release
publish: yarn release
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -110,7 +104,7 @@ jobs:
By default the GitHub Action creates a `.npmrc` file with the following content:
```txt
```
//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}
```
@@ -147,18 +141,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v3
- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Node.js 26
uses: actions/setup-node@v6
- name: Setup Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 26
node-version: 20.x
- name: Install Dependencies
run: pnpm install --frozen-lockfile
run: yarn
- name: Create Release Pull Request or Publish to npm
id: changesets
@@ -167,7 +158,7 @@ jobs:
- name: Publish
if: steps.changesets.outputs.hasChangesets == 'false'
# You can do something when a publish should happen.
run: pnpm publish
run: yarn publish
```
#### With version script
@@ -192,24 +183,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v6
uses: actions/checkout@v3
- name: Setup pnpm
uses: pnpm/action-setup@v6
- name: Setup Node.js 26
uses: actions/setup-node@v6
- name: Setup Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 26
node-version: 20.x
- name: Install Dependencies
run: pnpm install --frozen-lockfile
run: yarn
- name: Create Release Pull Request
uses: changesets/action@v1
with:
# this expects you to have a npm script called version that runs some logic and then calls `changeset version`.
version: pnpm version
version: yarn version
```
#### With Yarn 2 / Plug'n'Play
@@ -220,5 +208,5 @@ If you are using [Yarn Plug'n'Play](https://yarnpkg.com/features/pnp), you shoul
- uses: changesets/action@v1
with:
version: yarn changeset version
# ...
...
```
@@ -0,0 +1,4 @@
{
"$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json",
"ignore": ["ignored-package-pkg-a"]
}
@@ -0,0 +1,8 @@
{
"private": true,
"name": "ignored-package",
"version": "1.0.0",
"workspaces": [
"packages/*"
]
}
@@ -0,0 +1,7 @@
{
"name": "ignored-package-pkg-a",
"version": "1.0.0",
"dependencies": {
"ignored-package-pkg-b": "1.0.0"
}
}
@@ -0,0 +1,4 @@
{
"name": "ignored-package-pkg-b",
"version": "1.0.0"
}
@@ -0,0 +1,3 @@
{
"$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json"
}
+8
View File
@@ -0,0 +1,8 @@
{
"private": true,
"name": "simple-project",
"version": "1.0.0",
"workspaces": [
"packages/*"
]
}
@@ -0,0 +1,7 @@
{
"name": "simple-project-pkg-a",
"version": "1.0.0",
"dependencies": {
"simple-project-pkg-b": "1.0.0"
}
}
@@ -0,0 +1,4 @@
{
"name": "simple-project-pkg-b",
"version": "1.0.0"
}
+61
View File
File diff suppressed because one or more lines are too long
+40 -32
View File
@@ -1,34 +1,51 @@
{
"name": "@changesets/action",
"version": "1.8.0",
"license": "MIT",
"main": "dist/index.js",
"type": "module",
"exports": "./dist/index.js",
"files": [
"dist",
"action.yml"
],
"license": "MIT",
"devDependencies": {
"@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.29.3",
"@changesets/write": "^0.4.0",
"@rollup/plugin-commonjs": "^28.0.3",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^16.0.1",
"@rollup/plugin-terser": "^0.4.4",
"@types/node": "^22.15.17",
"@types/semver": "^7.5.0",
"builtin-modules": "^5.0.0",
"esbuild": "^0.25.4",
"fixturez": "^1.1.0",
"husky": "^3.0.3",
"prettier": "^2.0.5",
"rollup": "^4.40.2",
"typescript": "^5.8.3",
"vitest": "^3.1.3"
},
"scripts": {
"build": "rolldown -c",
"build": "rollup -c",
"test": "vitest",
"test:watch": "pnpm test --watch",
"test:watch": "yarn test --watch",
"typecheck": "tsc",
"format": "oxfmt --check",
"format:fix": "oxfmt",
"changeset": "changeset",
"bump": "node --experimental-strip-types ./scripts/bump.ts",
"release": "node --experimental-strip-types ./scripts/release.ts"
"release": "node --experimental-strip-types ./scripts/release.ts",
"release:pr": "node --experimental-strip-types ./scripts/release-pr.ts"
},
"engines": {
"node": ">= 24"
},
"dependencies": {
"@actions/core": "^3.0.1",
"@actions/exec": "^3.0.0",
"@actions/github": "^9.1.1",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^6.0.1",
"@changesets/ghcommit": "^2.0.1",
"@changesets/pre": "^2.0.2",
"@changesets/read": "^0.6.5",
"@manypkg/get-packages": "^1.1.3",
"@octokit/core": "^7.0.6",
"@octokit/plugin-throttling": "^11.0.3",
"@octokit/core": "^5.2.1",
"@octokit/plugin-throttling": "^8.0.0",
"@types/mdast": "^3.0.0",
"mdast-util-to-string": "^1.0.6",
"remark-parse": "^7.0.1",
@@ -36,22 +53,13 @@
"semver": "^7.5.3",
"unified": "^8.3.2"
},
"devDependencies": {
"@changesets/changelog-github": "^0.5.1",
"@changesets/cli": "^2.29.3",
"@changesets/types": "^6.1.0",
"@changesets/write": "^0.4.0",
"@types/node": "^24.12.2",
"@types/semver": "^7.5.0",
"fs-fixture": "^2.13.0",
"oxfmt": "^0.48.0",
"pkg-pr-new": "^0.0.71",
"rolldown": "^1.0.1",
"typescript": "^5.8.3",
"vitest": "^4.1.6"
"husky": {
"hooks": {}
},
"engines": {
"node": ">=24"
"prettier": {},
"resolutions": {
"trim": "^0.0.3",
"y18n": "^4.0.1"
},
"packageManager": "pnpm@11.1.1+sha512.d1fdf5f73c617b64fa1a56a81c3c8dfe0e966e33a6010aa256b517ae77be21d93e05affc0de1a83b0e4f29d569f68b446ae8f068cd7247c0bb3df0fb4d7bdf9a"
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
-2697
View File
File diff suppressed because it is too large Load Diff
-17
View File
@@ -1,17 +0,0 @@
blockExoticSubdeps: true
dedupePeers: true
dedupePeerDependents: true
minimumReleaseAge: 10080
minimumReleaseAgeExclude:
- '@oxc-project/*'
- '@rolldown/*'
- rolldown@1.0.1
- vite@8.0.13
- vitest@4.1.6
overrides:
lightningcss: '-' # we do not bundle any css
postcss: '-' # we do not bundle any css
shellEmulator: true
trustPolicy: no-downgrade
-13
View File
@@ -1,13 +0,0 @@
import { defineConfig } from 'rolldown'
export default defineConfig({
input: 'src/index.ts',
output: {
dir: 'dist',
format: 'esm',
cleanDir: true,
minify: true,
comments: false,
},
platform: 'node',
})
+38
View File
@@ -0,0 +1,38 @@
import { defineConfig } from "rollup";
import commonjs from "@rollup/plugin-commonjs";
import nodeResolve from "@rollup/plugin-node-resolve";
import terser from "@rollup/plugin-terser";
import json from "@rollup/plugin-json";
import { transform } from "esbuild";
import builtinModulesList from "builtin-modules";
const builtinModules = new Set(builtinModulesList);
export default defineConfig({
input: "src/index.ts",
output: {
dir: "dist",
format: "esm",
},
external: (id) => builtinModules.has(id),
plugins: [
nodeResolve({
preferBuiltins: false,
}),
json(),
commonjs(),
{
name: "esbuild",
async transform(code, id) {
if (!/\.(mts|cts|ts|tsx)$/.test(id)) {
return null;
}
const result = await transform(code, {
loader: "ts",
});
return result.code;
},
},
terser(),
],
});
+2 -2
View File
@@ -1,6 +1,6 @@
import { exec } from "@actions/exec";
import fs from "node:fs";
import path from "node:path";
import { exec } from "@actions/exec";
import pkgJson from "../package.json" with { type: "json" };
process.chdir(path.join(import.meta.dirname, ".."));
@@ -13,6 +13,6 @@ const readmePath = path.join(import.meta.dirname, "..", "README.md");
const content = fs.readFileSync(readmePath, "utf8");
const updatedContent = content.replace(
/changesets\/action@[^\s]+/g,
`changesets/action@${releaseLine}`,
`changesets/action@${releaseLine}`
);
fs.writeFileSync(readmePath, updatedContent);
+20
View File
@@ -0,0 +1,20 @@
import { exec } from "@actions/exec";
import path from "node:path";
import pkgJson from "../package.json" with { type: "json" };
const tag = `v${pkgJson.version}`;
const releaseLine = "pr-release";
process.chdir(path.join(import.meta.dirname, ".."));
await exec("git", ["checkout", "--detach"]);
await exec("git", ["add", "--force", "dist"]);
await exec("git", ["commit", "-m", tag]);
await exec("git", [
"push",
"--force",
"origin",
`HEAD:refs/heads/${releaseLine}`,
]);
+4 -3
View File
@@ -1,5 +1,6 @@
import path from "node:path";
import { exec, getExecOutput } from "@actions/exec";
import path from "node:path";
import pkgJson from "../package.json" with { type: "json" };
const tag = `v${pkgJson.version}`;
@@ -13,11 +14,11 @@ process.chdir(path.join(import.meta.dirname, ".."));
["ls-remote", "--exit-code", "origin", "--tags", `refs/tags/${tag}`],
{
ignoreReturnCode: true,
},
}
);
if (exitCode === 0) {
console.log(
`Action is not being published because version ${tag} is already published`,
`Action is not being published because version ${tag} is already published`
);
return;
}
+9 -9
View File
@@ -8,7 +8,7 @@ exports[`version > creates a draft PR when prDraft is "create" 1`] = `
# Releases
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
### Minor Changes
@@ -31,7 +31,7 @@ exports[`version > creates simple PR 1`] = `
# Releases
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
### Minor Changes
@@ -40,9 +40,9 @@ exports[`version > creates simple PR 1`] = `
### Patch Changes
- Updated dependencies
- changesets-dev-simple-project-pkg-b@1.1.0
- simple-project-pkg-b@1.1.0
## changesets-dev-simple-project-pkg-b@1.1.0
## simple-project-pkg-b@1.1.0
### Minor Changes
@@ -87,7 +87,7 @@ exports[`version > does not include changelog entries if full message exceeds si
> The changelog information of each package has been omitted from this message, as the content exceeds the size limit.
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
",
"draft": false,
@@ -107,7 +107,7 @@ exports[`version > doesn't include ignored package that got a dependency update
# Releases
## changesets-dev-ignored-package-pkg-b@1.1.0
## ignored-package-pkg-b@1.1.0
### Minor Changes
@@ -130,7 +130,7 @@ exports[`version > only includes bumped packages in the PR body 1`] = `
# Releases
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
### Minor Changes
@@ -183,7 +183,7 @@ exports[`version > updates an existing PR via GraphQL and converts it to draft w
# Releases
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
### Minor Changes
@@ -224,7 +224,7 @@ exports[`version > updates an existing PR via GraphQL without converting it to d
# Releases
## changesets-dev-simple-project-pkg-a@1.1.0
## simple-project-pkg-a@1.1.0
### Minor Changes
+3 -3
View File
@@ -14,7 +14,7 @@ const push = async (branch: string, options: GitOptions) => {
const switchToMaybeExistingBranch = async (
branch: string,
options: GitOptions,
options: GitOptions
) => {
let { stderr } = await getExecOutput("git", ["checkout", branch], {
ignoreReturnCode: true,
@@ -41,7 +41,7 @@ const checkIfClean = async (options: GitOptions): Promise<boolean> => {
const { stdout } = await getExecOutput(
"git",
["status", "--porcelain"],
options,
options
);
return !stdout.length;
};
@@ -71,7 +71,7 @@ export class Git {
],
{
cwd: this.cwd,
},
}
);
}
+13 -13
View File
@@ -1,6 +1,6 @@
import * as core from "@actions/core";
import fs from "node:fs/promises";
import path from "node:path";
import * as core from "@actions/core";
import { Git } from "./git.ts";
import { setupOctokit } from "./octokit.ts";
import readChangesetState from "./readChangesetState.ts";
@@ -48,7 +48,7 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
core.info("setting GitHub credentials");
await fs.writeFile(
`${process.env.HOME}/.netrc`,
`machine github.com\nlogin github-actions[bot]\npassword ${githubToken}`,
`machine github.com\nlogin github-actions[bot]\npassword ${githubToken}`
);
let { changesets } = await readChangesetState(cwd);
@@ -56,7 +56,7 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
let publishScript = core.getInput("publish");
let hasChangesets = changesets.length !== 0;
const hasNonEmptyChangesets = changesets.some(
(changeset) => changeset.releases.length > 0,
(changeset) => changeset.releases.length > 0
);
let hasPublishScript = !!publishScript;
@@ -67,12 +67,12 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
switch (true) {
case !hasChangesets && !hasPublishScript:
core.info(
"No changesets present or were removed by merging release PR. Not publishing because no publish script found.",
"No changesets present or were removed by merging release PR. Not publishing because no publish script found."
);
return;
case !hasChangesets && hasPublishScript: {
core.info(
"No changesets found. Attempting to publish any unpublished packages to npm",
"No changesets found. Attempting to publish any unpublished packages to npm"
);
if (process.env.NPM_TOKEN) {
@@ -87,24 +87,24 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
});
if (authLine) {
core.info(
"Found existing auth token for the npm registry in the user .npmrc file",
"Found existing auth token for the npm registry in the user .npmrc file"
);
} else {
core.info(
"Didn't find existing auth token for the npm registry in the user .npmrc file, creating one",
"Didn't find existing auth token for the npm registry in the user .npmrc file, creating one"
);
await fs.appendFile(
userNpmrcPath,
`\n//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`,
`\n//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`
);
}
} else {
core.info(
"No user .npmrc file found, creating one with NPM_TOKEN used as auth token",
"No user .npmrc file found, creating one with NPM_TOKEN used as auth token"
);
await fs.writeFile(
userNpmrcPath,
`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`,
`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}\n`
);
}
} else if (
@@ -112,11 +112,11 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
process.env.ACTIONS_ID_TOKEN_REQUEST_URL
) {
core.info(
"No NPM_TOKEN found, but OIDC is available - using npm trusted publishing",
"No NPM_TOKEN found, but OIDC is available - using npm trusted publishing"
);
} else {
core.info(
"No NPM_TOKEN or OIDC available - assuming npm is already authenticated",
"No NPM_TOKEN or OIDC available - assuming npm is already authenticated"
);
}
@@ -133,7 +133,7 @@ const getOptionalInput = (name: string) => core.getInput(name) || undefined;
core.setOutput("published", "true");
core.setOutput(
"publishedPackages",
JSON.stringify(result.publishedPackages),
JSON.stringify(result.publishedPackages)
);
}
return;
+4 -4
View File
@@ -9,7 +9,7 @@ export const setupOctokit = (githubToken: string) => {
throttle: {
onRateLimit: (retryAfter, options: any, octokit, retryCount) => {
core.warning(
`Request quota exhausted for request ${options.method} ${options.url}`,
`Request quota exhausted for request ${options.method} ${options.url}`
);
if (retryCount <= 2) {
@@ -21,10 +21,10 @@ export const setupOctokit = (githubToken: string) => {
retryAfter,
options: any,
octokit,
retryCount,
retryCount
) => {
core.warning(
`SecondaryRateLimit detected for request ${options.method} ${options.url}`,
`SecondaryRateLimit detected for request ${options.method} ${options.url}`
);
if (retryCount <= 2) {
@@ -34,7 +34,7 @@ export const setupOctokit = (githubToken: string) => {
},
},
},
throttling,
throttling
);
};
+2 -2
View File
@@ -1,6 +1,6 @@
import type { PreState, NewChangeset } from "@changesets/types";
import { readPreState } from "@changesets/pre";
import readChangesets from "@changesets/read";
import type { PreState, NewChangeset } from "@changesets/types";
export type ChangesetState = {
preState: PreState | undefined;
@@ -8,7 +8,7 @@ export type ChangesetState = {
};
export default async function readChangesetState(
cwd: string = process.cwd(),
cwd: string = process.cwd()
): Promise<ChangesetState> {
let preState = await readPreState(cwd);
let changesets = await readChangesets(cwd);
+45 -88
View File
@@ -1,7 +1,8 @@
import path from "node:path";
import type { Changeset } from "@changesets/types";
import writeChangeset from "@changesets/write";
import { createFixture } from "fs-fixture";
import fixturez from "fixturez";
import fs from "node:fs/promises";
import path from "node:path";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { Git } from "./git.ts";
import { setupOctokit } from "./octokit.ts";
@@ -35,58 +36,14 @@ let mockedGithubMethods = {
};
let mockedGraphql = vi.fn();
const nodeModulesDir = path.join(import.meta.dirname, "..", "node_modules");
function createSimpleProjectFixture() {
return createFixture({
node_modules: (api) => api.symlink(nodeModulesDir),
".changeset/config.json": JSON.stringify({}),
"packages/pkg-a/package.json": JSON.stringify({
name: "changesets-dev-simple-project-pkg-a",
version: "1.0.0",
dependencies: {
"changesets-dev-simple-project-pkg-b": "1.0.0",
},
}),
"packages/pkg-b/package.json": JSON.stringify({
name: "changesets-dev-simple-project-pkg-b",
version: "1.0.0",
}),
"package.json": JSON.stringify({
name: "simple-project",
version: "1.0.0",
private: true,
workspaces: ["packages/*"],
}),
});
}
function createIgnoredPackageFixture() {
return createFixture({
node_modules: (api) => api.symlink(nodeModulesDir),
".changeset/config.json": JSON.stringify({
ignore: ["changesets-dev-ignored-package-pkg-a"],
}),
"packages/pkg-a/package.json": JSON.stringify({
name: "changesets-dev-ignored-package-pkg-a",
version: "1.0.0",
dependencies: {
"changesets-dev-ignored-package-pkg-b": "1.0.0",
},
}),
"packages/pkg-b/package.json": JSON.stringify({
name: "changesets-dev-ignored-package-pkg-b",
version: "1.0.0",
}),
"package.json": JSON.stringify({
name: "ignored-package",
version: "1.0.0",
private: true,
workspaces: ["packages/*"],
}),
});
}
let f = fixturez(import.meta.dirname);
const linkNodeModules = async (cwd: string) => {
await fs.symlink(
path.join(import.meta.dirname, "..", "node_modules"),
path.join(cwd, "node_modules")
);
};
const writeChangesets = (changesets: Changeset[], cwd: string) => {
return Promise.all(changesets.map((commit) => writeChangeset(commit, cwd)));
};
@@ -97,8 +54,8 @@ beforeEach(() => {
describe("version", () => {
it("creates simple PR", async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -111,18 +68,18 @@ describe("version", () => {
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
{
name: "changesets-dev-simple-project-pkg-b",
name: "simple-project-pkg-b",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
@@ -136,8 +93,8 @@ describe("version", () => {
});
it('creates a draft PR when prDraft is "create"', async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -150,14 +107,14 @@ describe("version", () => {
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
@@ -172,8 +129,8 @@ describe("version", () => {
});
it("only includes bumped packages in the PR body", async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -186,14 +143,14 @@ describe("version", () => {
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
@@ -207,8 +164,8 @@ describe("version", () => {
});
it("doesn't include ignored package that got a dependency update in the PR body", async () => {
await using fixture = await createIgnoredPackageFixture();
const cwd = fixture.path;
let cwd = f.copy("ignored-package");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -221,14 +178,14 @@ describe("version", () => {
{
releases: [
{
name: "changesets-dev-ignored-package-pkg-b",
name: "ignored-package-pkg-b",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
@@ -242,8 +199,8 @@ describe("version", () => {
});
it("does not include changelog entries if full message exceeds size limit", async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -256,7 +213,7 @@ describe("version", () => {
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
@@ -283,7 +240,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
`,
},
],
cwd,
cwd
);
await runVersion({
@@ -296,13 +253,13 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
expect(mockedGithubMethods.pulls.create.mock.calls[0]).toMatchSnapshot();
expect(mockedGithubMethods.pulls.create.mock.calls[0][0].body).toMatch(
/The changelog information of each package has been omitted from this message/,
/The changelog information of each package has been omitted from this message/
);
});
it("does not include any release information if a message with simplified release info exceeds size limit", async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({ data: [] }));
@@ -315,7 +272,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
@@ -342,7 +299,7 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
`,
},
],
cwd,
cwd
);
await runVersion({
@@ -355,13 +312,13 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
expect(mockedGithubMethods.pulls.create.mock.calls[0]).toMatchSnapshot();
expect(mockedGithubMethods.pulls.create.mock.calls[0][0].body).toMatch(
/All release information have been omitted from this message, as the content exceeds the size limit/,
/All release information have been omitted from this message, as the content exceeds the size limit/
);
});
it('updates an existing PR via GraphQL without converting it to draft when prDraft is "create"', async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }],
@@ -372,14 +329,14 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
@@ -394,8 +351,8 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
});
it('updates an existing PR via GraphQL and converts it to draft when prDraft is "always"', async () => {
await using fixture = await createSimpleProjectFixture();
const cwd = fixture.path;
let cwd = f.copy("simple-project");
await linkNodeModules(cwd);
mockedGithubMethods.pulls.list.mockImplementationOnce(() => ({
data: [{ number: 123, node_id: "PR_kwDOA" }],
@@ -406,14 +363,14 @@ fluminis divesque vulnere aquis parce lapsis rabie si visa fulmineis.
{
releases: [
{
name: "changesets-dev-simple-project-pkg-a",
name: "simple-project-pkg-a",
type: "minor",
},
],
summary: "Awesome feature",
},
],
cwd,
cwd
);
await runVersion({
+18 -20
View File
@@ -1,11 +1,11 @@
import fs from "node:fs/promises";
import { createRequire } from "node:module";
import path from "node:path";
import * as core from "@actions/core";
import { exec, getExecOutput } from "@actions/exec";
import * as github from "@actions/github";
import type { PreState } from "@changesets/types";
import { type Package, getPackages } from "@manypkg/get-packages";
import fs from "node:fs/promises";
import { createRequire } from "node:module";
import path from "node:path";
import semverLt from "semver/functions/lt.js";
import { Git } from "./git.ts";
import type { Octokit } from "./octokit.ts";
@@ -28,7 +28,7 @@ const MAX_CHARACTERS_PER_MESSAGE = 60000;
const createRelease = async (
octokit: Octokit,
{ pkg, tagName }: { pkg: Package; tagName: string },
{ pkg, tagName }: { pkg: Package; tagName: string }
) => {
let changelog;
try {
@@ -45,7 +45,7 @@ const createRelease = async (
// we can find a changelog but not the entry for this version
// if this is true, something has probably gone wrong
throw new Error(
`Could not find changelog entry for ${pkg.packageJson.name}@${pkg.packageJson.version}`,
`Could not find changelog entry for ${pkg.packageJson.name}@${pkg.packageJson.version}`
);
}
@@ -91,7 +91,7 @@ export async function runPublish({
let changesetPublishOutput = await getExecOutput(
publishCommand,
publishArgs,
{ cwd, env: { ...process.env, GITHUB_TOKEN: githubToken } },
{ cwd, env: { ...process.env, GITHUB_TOKEN: githubToken } }
);
let { packages, tool } = await getPackages(cwd);
@@ -111,7 +111,7 @@ export async function runPublish({
if (pkg === undefined) {
throw new Error(
`Package "${pkgName}" not found.` +
"This is probably a bug in the action, please open an issue",
"This is probably a bug in the action, please open an issue"
);
}
releasedPackages.push(pkg);
@@ -123,14 +123,14 @@ export async function runPublish({
const tagName = `${pkg.packageJson.name}@${pkg.packageJson.version}`;
await git.pushTag(tagName);
await createRelease(octokit, { pkg, tagName });
}),
})
);
}
} else {
if (packages.length === 0) {
throw new Error(
`No package found.` +
"This is probably a bug in the action, please open an issue",
"This is probably a bug in the action, please open an issue"
);
}
let pkg = packages[0];
@@ -166,16 +166,14 @@ export async function runPublish({
const requireChangesetsCliPkgJson = (cwd: string) => {
try {
return require(
require.resolve("@changesets/cli/package.json", {
paths: [cwd],
}),
);
return require(require.resolve("@changesets/cli/package.json", {
paths: [cwd],
}));
} catch (err) {
if (isErrorWithCode(err, "MODULE_NOT_FOUND")) {
throw new Error(
`Have you forgotten to install \`@changesets/cli\` in "${cwd}"?`,
{ cause: err },
{ cause: err }
);
}
throw err;
@@ -311,7 +309,7 @@ export async function runVersion({
{
cwd,
env,
},
}
);
}
@@ -320,7 +318,7 @@ export async function runVersion({
changedPackages.map(async (pkg) => {
let changelogContents = await fs.readFile(
path.join(pkg.dir, "CHANGELOG.md"),
"utf8",
"utf8"
);
let entry = getChangelogEntry(changelogContents, pkg.packageJson.version);
@@ -330,7 +328,7 @@ export async function runVersion({
content: entry.content,
header: `## ${pkg.packageJson.name}@${pkg.packageJson.version}`,
};
}),
})
);
const finalPrTitle = `${prTitle}${!!preState ? ` (${preState.tag})` : ""}`;
@@ -355,8 +353,8 @@ export async function runVersion({
`Existing pull requests: ${JSON.stringify(
existingPullRequests.data,
null,
2,
)}`,
2
)}`
);
await git.pushChanges({ branch: versionBranch, message: finalCommitMessage });
+7 -7
View File
@@ -1,11 +1,11 @@
import unified from "unified";
import remarkParse from "remark-parse";
import remarkStringify from "remark-stringify";
import fs from "node:fs/promises";
import { getPackages, type Package } from "@manypkg/get-packages";
import type { Root } from "mdast";
// @ts-ignore
import mdastToString from "mdast-util-to-string";
import remarkParse from "remark-parse";
import remarkStringify from "remark-stringify";
import unified from "unified";
import { getPackages, type Package } from "@manypkg/get-packages";
export const BumpLevels = {
dep: 0,
@@ -21,7 +21,7 @@ export async function getVersionsByDirectory(cwd: string) {
export async function getChangedPackages(
cwd: string,
previousVersions: Map<string, string>,
previousVersions: Map<string, string>
) {
let { packages } = await getPackages(cwd);
let changedPackages = new Set<Package>();
@@ -87,7 +87,7 @@ export function getChangelogEntry(changelog: string, version: string) {
export function sortTheThings(
a: { private: boolean; highestLevel: number },
b: { private: boolean; highestLevel: number },
b: { private: boolean; highestLevel: number }
) {
if (a.private === b.private) {
return b.highestLevel - a.highestLevel;
@@ -110,6 +110,6 @@ export function isErrorWithCode(err: unknown, code: string) {
export function fileExists(filePath: string) {
return fs.access(filePath, fs.constants.F_OK).then(
() => true,
() => false,
() => false
);
}
+17
View File
@@ -0,0 +1,17 @@
type Opts = {
glob?: string | Array<string>;
root?: string;
cleanup?: boolean;
};
declare module "fixturez" {
export default function (
cwd: string,
opts?: Opts
): {
find: (a: string) => string;
temp: () => string;
copy: (a: string) => string;
cleanup: () => any;
};
}
+3069
View File
File diff suppressed because it is too large Load Diff