- iOS
- Android
- Xamarin
- GitHub
- GitHub Actions
When developing an application you always need to manage versions for your application. To deliver a new version of your application, one way to do it will be:
This kind of process is too long and error prone, while the only thing you want is to have the same version between your Git tag and your application package delivered. So why not just read the Git tag?
To solve this problem I developed a new set of free GitHub Actions to use in your workflow. These actions provide a way to extract the version from a Git repository tag and apply it to your project as you want.
Here there are:
To use one of these actions it’s easy, follow one of the links above and then click on Use latest version
button. This will prompt a dialog with the yaml
code to use it.
The first action is the most important one: extract-version-from-tag-action
. To use it in your workflow you first need to set the actions/checkout@v2
with the fetch-depth
property to 0
. This will ensure that all the tags informations will be available.
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0 # Mandatory to use the extract version from tag action
- name: Extract version from tag
uses: damienaicheh/extract-version-from-tag-action@v1.0.0
This will extract the version of the latest tag pushed to your Git repository, from the branch you selected to build your workflow. Then the action will assign each part of your tag to a global variable.
For example if you have a tag with a value of v1.2.3
or 1.2.3
this will automatically assign the global variables $MAJOR
to 1, $MINOR
to 2 and $PATCH
to 3.
In addition this action will compute the number of commits from the first commit on your branch to this tag and assign this value to $NUMBER_OF_COMMITS
and if you want only the number of commits since your tag you can use $NUMBER_OF_COMMITS_SINCE_TAG
. These 4 variables will then be usable in your workflow.yml
.
Also the action supports pre-release tags so if you have an alpha version like this: v1.2.3-alpha6
the alpha6 will be assign to the variable $PRE_RELEASE
and you can use it like the previous ones.
By convention the Git tags are defined like this: v(Major).(Minor).(Patch)
. But the extract-version-from-tag-action
action also manages the tags defined without the v
prefix.
This action can be used whatever the technology you use for your GitHub Actions.
It’s now time to use the three others GitHub Actions to update your iOS and Android applications versions whatever the mobile technology you used.
update-ios-version-info-plist-action
for the Info.plist
update-android-version-manifest-action
for the AndroidManifest.xml
update-android-version-gradle-action
for the build.gradle
inside the app
folderThese actions can be used with or without using the extract-version-from-tag-action
action before.
Let’s assume you use the extract-version-from-tag-action
action before, you will be able to use the variables inside the 3 actions like this:
For iOS to update the Info.plist
:
- name: Update Info.plist
uses: damienaicheh/update-ios-version-info-plist-action@v1.0.0
with:
info-plist-path: './path_to_your/Info.plist'
bundle-short-version-string: '${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}'
bundle-version: ${{ env.NUMBER_OF_COMMITS }}
print-file: true
For Android:
If you need to update the AndroidManifest.xml
:
- name: Update AndroidManifest.xml
uses: damienaicheh/update-android-version-manifest-action@v1.0.0
with:
android-manifest-path: './path_to_your/AndroidManifest.xml'
version-code: ${{ env.NUMBER_OF_COMMITS }}
version-name: '${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}'
print-file: true
If you need to update the build.gradle
inside the app
folder:
- name: Update gradle version for Android
uses: damienaicheh/update-android-version-gradle-action@v1.0.0
with:
build-gradle-path: './path_to_your/build.gradle'
version-code: ${{ env.NUMBER_OF_COMMITS }}
version-name: '${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}'
print-file: true
The detail of each input parameters of these actions are also available directly on their repository or the GitHub Marketplace.
Notice that for these 3 actions you can set the value of the properties in different ways for example:
version-name: '${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}'
you can concatenate them with whatever variable you previously define:
version-name: '${{ env.MAJOR }}.${{ env.MINOR }}.${{ env.PATCH }}-${{ env.PRE_RELEASE }}-(${{ env.NUMBER_OF_COMMITS }})'
or simply use it like this:
version-name: '1.2.3'
These actions are a first starting point to help developers managing their applications versions with GitHub Actions. Feel free to contribute to this project if you want.
Happy coding!