Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/expo-community/standard-version-expo
Automatic Expo versioning with Standard Version
https://github.com/expo-community/standard-version-expo
automation convetional-commits expo release standard-version
Last synced: about 2 months ago
JSON representation
Automatic Expo versioning with Standard Version
- Host: GitHub
- URL: https://github.com/expo-community/standard-version-expo
- Owner: expo-community
- License: mit
- Created: 2020-01-05T00:42:25.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2023-03-04T05:35:57.000Z (almost 2 years ago)
- Last Synced: 2024-10-02T07:58:45.584Z (3 months ago)
- Topics: automation, convetional-commits, expo, release, standard-version
- Language: TypeScript
- Homepage:
- Size: 200 KB
- Stars: 97
- Watchers: 3
- Forks: 30
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
Standard Version Expo
Automatic Expo versioning with Standard Version
npm i -D standard-version@next standard-version-expo## What's inside?
Standard version is a tool to automate the versioning of your project using semver and [conventional commits][link-conventional].
This package includes some helpful bumpers to update the Expo manifest automatically.
With these bumpers you can automate updating the [`version`][link-expo-version], [Android `versionCode`][link-expo-android], and/or [iOS `buildNumber`][link-expo-ios].
You should be able to automate versioning of your app by using a single command, like:```bash
$ npx standard-version --release-as minor
```> If you receive an error like `Invalid Version: undefined`, make sure your `package.json` has a starting `version`.
## Getting started
It's recommended to install both Standard Version and this package as `devDependency`.
You can do this with the npm command listed at the top of this read me.
After you installed the packages, we need to [configure Standard Version using any of the configuration methods listed here][link-standard-version].
Here is an example configuration that updates the version, Android `versionCode`, and iOS `buildNumber` using the recommended approaches.```js
// .versionrc.js
module.exports = {
bumpFiles: [
{
filename: 'package.json',
},
{
filename: 'app.json',
updater: require.resolve('standard-version-expo'),
},
{
filename: 'app.json',
updater: require.resolve('standard-version-expo/android'),
},
{
filename: 'app.json',
updater: require.resolve('standard-version-expo/ios'),
},
],
};
```To test if your configuration works as expected, you can run standard version in dry mode.
This shows you what will happen, without actually applying the versions and tags.```bash
$ npx standard-version --dry-run
```## Usage
Standard Version's version bumpers are pretty simple; each bump only updates a single file using a single updater.
This package exposes multiple kinds of updaters, for different areas of the manifest.
You can "compose" your own set of `bumpFiles` entries to suit your needs.| updater | example | description |
| ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `` | `3.2.1` | _alias of `manifest/version`_ |
| `manifest` | `3.2.1` | _alias of `manifest/version`_ |
| `manifest/version` | `3.2.1` | Replace `expo.version` with the exact calculated semver. (**recommended**) |
| `android` | `360030201` | _alias of `android/code`_ |
| `android/code` | `350010000` | Replace `expo.android.versionCode` with the [method described by Maxi Rosson][link-version-code]. (**recommended**) |
| `android/increment` | `8` | Replace `expo.android.versionCode` with an incremental version. |
| `ios` | `3.2.1` | _alias of `ios/version`_ |
| `ios/code` | `360030201` | Replace `expo.ios.buildNumber` with the [method described by Maxi Rosson][link-version-code]. |
| `ios/increment` | `9` | Replace `expo.ios.buildNumber` with an incremental version. |
| `ios/version` | `3.2.1` | Replace `expo.ios.buildNumber` with the exact calculated semver. (**recommended**) |### Version code
Semver is one of the most popular versioning methods; it generates a string with a syntax that even humans can read.
Unfortunately, in Android, we are limited to use a numeric `versionCode` as version.
The version code uses an approach from [Maxi Rosson][link-version-code] to calculate a numeric value from semver.
It's a deterministic solution that removes some of the ambiguity of incremental build numbers, like security-patching old versions.> The method initially uses the Android minimum API level. For Expo, we replaced this with the major Expo SDK version.
with :heart: byCedric
[link-conventional]: https://www.conventionalcommits.org/en/v1.0.0/
[link-expo-android]: https://docs.expo.io/versions/latest/workflow/configuration#android
[link-expo-ios]: https://docs.expo.io/versions/latest/workflow/configuration#ios
[link-expo-version]: https://docs.expo.io/versions/latest/workflow/configuration#version
[link-standard-version]: https://github.com/conventional-changelog/standard-version#configuration
[link-version-code]: https://medium.com/@maxirosson/versioning-android-apps-d6ec171cfd82