- appium@3.6.0 - @appium/base-driver@10.7.2 - @appium/base-plugin@3.3.3 - @appium/docutils@2.5.2 - @appium/driver-test-support@2.0.1 - @appium/eslint-config-appium-ts@3.2.4 - @appium/execute-driver-plugin@6.0.7 - @appium/fake-driver@6.2.2 - @appium/fake-plugin@4.3.3 - @appium/images-plugin@4.2.8 - @appium/logger@2.0.10 - @appium/opencv@4.1.7 - @appium/oxc-config@1.1.0 - @appium/plugin-test-support@2.0.1 - @appium/relaxed-caps-plugin@2.2.5 - @appium/schema@1.3.0 - @appium/semantic-release-config@1.1.0 - @appium/storage-plugin@1.1.8 - @appium/strongbox@1.1.3 - @appium/support@7.2.6 - @appium/tsconfig@1.2.0 - @appium/types@1.6.0 - @appium/universal-xml-plugin@2.1.7
@appium/semantic-release-config
Shared
semantic-releaseconfiguration factory for Appium and Appium-adjacent projects.
Usage
Install the package:
npm install @appium/semantic-release-config --save-dev
Then, in release.config.mjs (or .releaserc.mjs):
// release.config.mjs
import releaseConfig from '@appium/semantic-release-config';
export default releaseConfig();
This reproduces the "standard" config used by most appium-org repos: an angular-preset
commit-analyzer, a conventionalcommits-preset release-notes-generator, a changelog committed
back to the repo, npm publish, and a GitHub release.
For a repo that deviates from the standard, pass options:
export default releaseConfig({
branches: ['main'],
extraGitAssets: ['npm-shrinkwrap.json'],
removeGitAssets: ['docs'],
releaseNotesTypeOverrides: {chore: {hidden: true}},
});
For a repo that isn't published to npm (a sample/demo app rather than a library), use the app
flavor:
export default releaseConfig({
flavor: 'app',
branches: ['main'],
extraGitAssets: ['app/build.gradle.kts'],
});
Options
| Option | Type | Default | Effect |
|---|---|---|---|
flavor |
'library' | 'app' |
'library' |
'app' switches to the conventionalcommits commit-analyzer preset, sets npmPublish: false, disables GitHub success/fail PR & issue comments, and defaults @semantic-release/github's assets to []. |
branches |
string[] |
(omitted) | Sets the top-level branches option. Omit to fall back to semantic-release's own default branches. |
extraGitAssets |
string[] |
[] |
Appended to @semantic-release/git's assets. |
removeGitAssets |
string[] |
[] |
Removed from @semantic-release/git's assets (applied after extraGitAssets). |
githubAssets |
Array |
(flavor default) | @semantic-release/github's assets option — plain path strings or {path, label} objects. |
commitAnalyzerReleaseRules |
Array |
(flavor default) | Full override of commit-analyzer's releaseRules. |
releaseNotesTypeOverrides |
Record<string, {hidden?: boolean, section?: string}> |
(none) | Shallow-patched onto the default presetConfig.types, keyed by commit type, e.g. {chore: {hidden: true}}. |
Gotchas
extendsin a JSON.releasercdoes a shallow merge.pluginsand other array options are replaced wholesale, not deep-merged, when redefined locally. This means a JSON config withextendscan't losslessly express "same plugin list, but tweak one nested option of one plugin" — exactly what several appium-org repos need. That's why this package ships a JS factory function instead of static JSON: the merging happens once, in JS, before semantic-release ever sees the resulting config object.- This package is ESM-only. Consumers must
importthe factory from arelease.config.mjs(or.releaserc.mjs) — repos still on CommonJS need to migrate to ESM (or at least add"type": "module") first. Also:cosmiconfig(which semantic-release uses to locate its config) searches.releaserc*files beforerelease.config.*. If a migration addsrelease.config.mjswithout deleting the old.releaserc/.releaserc.jsonin the same commit, semantic-release will silently keep using the old file.
Migrating an existing repo
This package only defines the shared config; migrating the ~26 existing appium-org repos off
their hand-copied .releaserc files is a separate, repo-by-repo effort. For each repo:
- Add
@appium/semantic-release-configas a devDependency. - Remove that repo's own
semantic-release,@semantic-release/changelog,@semantic-release/git, andconventional-changelog-conventionalcommitsdevDependencies — they're pulled in transitively via this package's own pinneddependencies, so restating their versions per-repo is no longer necessary (and would risk drifting from the versions this package actually ships). - Add a
release.config.mjsthat imports and calls the factory with whatever options reproduce that repo's current deviations (see the table above). - Delete the old
.releaserc/.releaserc.jsonin the same commit — see gotcha #2 above. - If the repo is still on CommonJS, migrate it to
"type": "module"first (or as part of the same change).
License
Copyright © 2026 OpenJS Foundation. Licensed Apache-2.0