CodeIgniter4/admin/workflow.md
2020-03-06 22:10:53 -05:00

3.6 KiB

Workflow

The main repo has two branches of interest: "master" (stable) and "develop" (in progress). There might be other feature branches, but they are not relevant to this process.

Once "develop" is ready for a new release, the general workflow is to

release prep (admin/release <version> <qualifier>)...

  • create a "release" branch from develop
  • update version dependencies or constants
  • generate version(s) of the user guide
  • move or ignore stuff, distinguishing release from development
  • test that all is as it should be
  • merge the release branch into "master" & "develop"

After these have been vetted ...

  • push the release(s) to github (admin/release-deploy <version> <qualifier>)
  • manually create the release & tag it on GitHub, based on master
    Include any supplementary binaries as part of releases.
  • Confirm the GitHub release action successfully deploys appstarter and framework
  • manually post a sticky announcement thread on the forum
  • manually tweet the release announcement

Assumptions

You (a maintainer) have forked the main CodeIgniter4 repo, and the git alias origin, in your local clone, refers to your fork. The config script defines an additional alias, CI_ORG, which refers to the CodeIgniter 4 organization on github. This separation keeps the release branch isolated for any testing you want to do.

The develop branch of the main repo should be "clean", and ready for a release. This means that the changelog and upgrading instructions have been suitably edited.

This script is not intended to deal with hotfixes, i.e. PRs against master that need to also be merged into develop, probably as part of a bug fix minor release.

GitHub Action

There is an action defined to run on any release publish event: .github/workflows/deploy.yml. This will cascade any release made from the main repo to the distribution repos, appstarter and framework. In order for the action to authenticate you must create a Personal Access Token and add it as a repo secret ACCESS_TOKEN. It is recommended that the PAT be to a secure bot account with organization access that is dedicated for this purpose.

If for some reason a release needs to be made that should not cascade the easiest solution is to disable repo actions temporarily.

Usage

Inside a shell prompt, in the project root:

`admin/release version [qualifier]`

Nothing is pushed to the repo at this point. You have a chance to vet the repository changes.

The "version" should follow semantic versioning, e.g. 4.0.6, and the version number should be higher than the current released one.

The "qualifier" argument is a suffix to add to the version for a pre-release, e.g. beta.2 or rc.41.

Examples:

  • admin/release 4.0.0 alpha.1 would prepare the "4.0.0-alpha.1" pre-release PR
  • admin/release 4.0.0 would prepare the "4.0.0" release PR
  • admin/release peanut butter banana would complain and tell you to read these directions

Once you have vetted the dist folder inside your local repo, you can merge & push everything with

`admin/release-deploy please`

On github.com, create an appropriate release (or pre-release), with any optional files from the root of dist.

Release notes

On launch of a new release, a release notes post should be made in the announcements subforum. The planned text for it (so it can be previewed by admins) is in admin/release_notes.bb.

Audience

These scripts are intended for use by framework maintainers, i.e. someone with commit rights on the CI4 repositories.

You will be prompted for your github credentials and GPG-signing key as appropriate.