the flow should be as follows
- Each release is developed on a branch that is derived from the development branch (e.g. development-2.0).
- All pull requests should be made to this release branch; no commits should be made directly to the development branch.
- The development branch should always reflect the latest release.
- the release branch should go to development then to master.
- The latest commit should be tagged, tags should be
annotated
and in the formatv*
for the release workflow to work. examplegit tag -a v*
- Our github workflow
.github/workflows/release.yml
is triggered when a tag is pushed. - The workflow basicly runs goreleaser to create a new release which creates the different release assets required to run the provider on different platforms
i.e windows,linux and mac
. - the release.yml requires some secrets to be existed on the repo.
GPG private key
: this is generated with the commandgpg --armor --export-secret-keys [key ID or email]
.PASSPHRASE
: The passphrase for your GPG private key.
- Once the release is done the terraform registry always watches the repo for new releases and when it finds a new release it publishes a new provider version.
For example, releasing v1.7.0 for different networks, the tags should be:
dev
: v1.7.0-devqa
: v1.7.0-qatest
: v1.7.0-rcXmain
: v1.7.0- the release branch should go to development then to master then to be tagged, tag should be in format
v*
format for the release workflow to work. - Our github workflow
.github/workflows/release.yml
is triggered when a tag is pushed. - The workflow basically runs goreleaser to create a new release which creates the different release assets required to run the provider of different platforms
i.e windows,linux and mac
. - the release.yml requires some secrets to be exists on the repo.
GPG private key
: this is generated with the commandgpg --armor --export-secret-keys [key ID or email]
.PASSPHRASE
: The passphrase for your GPG private key.
- Once the release is done the terraform registry always watch the repo for new releases and when it finds a new release it publishes a new provider version.
The Grid Terraform provider depends on ZOS and the Substrate client, so new releases of these repos should be reflected in this project.
This basically done as any go dependency update the required version in go.mod and if there are changes required on the code should be fixed for example if we want to update to the last commit in zos which is d9c7fe2
we do the following.
go get https://github.com/threefoldtech/zos@d9c7fe2
The approach of having substrate-client for each environment is not good because
- We need to manage different substrate versions and repeat the same changes every time we need to update an environment.
- Also sometime the interface itself go changed and hence we can not use this approach.
- This sometimes required to update
go-substrate-rpc-client
version is substrate client is rebased or so for example.