Frontend (JavaScript/TypeScript)
Backend (JavaScript/TypeScript)
The is a fully functional set of GitHub Actions workflows and a starter application stack intended to help Agile teams hit the ground running.
Features:
demo
labelInitial setup is intended to take an hour or less. This depends greatly on intended complexity, features selected/excluded and outside cooperation.
The following are required:
Create a new repository using this repository as a template.
Variables and secrets are consumed by workflows. Environments provide their own values, overriding default sets.
Secrets are hidden from logs and outputs, while variables are visible. Using secrets exclusively can make troubeshooting more difficult.
Note: Dependabot, which we don't recommend as highly as Renovate, requires its own set of variables.
Click Settings > Secrets and Variables > Actions > Secrets > New repository secret
OC_TOKEN
OpenShift token, different for every project/namespace. This guide assumes your OpenShift platform team has provisioned a pipeline account.
{{ secrets.OC_TOKEN }}
Locate an OpenShift pipeline token:
pipeline-token-...
or a similarly privileged tokentoken
OC_TOKEN
OC_NAMESPACE
OpenShift project/namespace. Provided by your OpenShift platform team.
{{ secrets.OC_NAMESPACE }}
abc123-dev | test | prod
SONAR_TOKEN(s)
If SonarCloud is being used each application will have its own token. Single-application repositories typically use ${{ secrets.SONAR_TOKEN }}
, while monorepos use similar names.
E.g.:
${{ secrets.SONAR_TOKEN_BACKEND }}
${{ secrets.SONAR_TOKEN_FRONTEND }}
BC Government employees can request SonarCloud projects by creating an issue with BCDevOps. Please make sure to request a monorepo with component names (e.g. backend, frontend), which may not be explained in their directions.
Click Settings > Secrets and Variables > Actions > Variables > New repository variable
OC_SERVER
OpenShift server address.
{{ vars.OC_SERVER }}
https://api.gold.devops.gov.bc.ca:6443
or https://api.silver.devops.gov.bc.ca:6443
MS_TEAMS_WEBHOOK_URI
{{ vars.MS_TEAMS_WEBHOOK_URI }}
Environments are groups of secrets and variables that can be gatekept. This includes limting access to certain users or requiring manual approval before a requesting workflow can run. Environment values override any default values.
For pull requests and development surrounding lower-level, sandboxed environments it is best not to use an environment at all. Higher level environments, like TEST and PROD, will override those values as necessary.
Click Settings > Environments > New environment
Environments provide a number of features, including:
Dependabot and Mend Renovate can both provide dependency updates using pull requests. Dependabot is simpler to configure, while Renovate is much more configurable and lighter on resources.
A config file (renovate.json
) is included with this template. It can source config from our renovate repository. Renovate can be self-hosted or run using the GitHub App managed at the organization level. For BC Government the OCIO controls this application, so please opt in with them using a GitHub issue.
To opt-in:
Configure
and set up your repositoryRequest to add X repo to Renovate App
Dependabot is no longer recommended as an alternative to Renovate for generating security, vulnerability and dependency pull requests. It can still be used to generate warnings under the GitHub Security tab, which is only viewable by repository administrators.
Squash merging is recommended for simplified history and ease of rollback. Cleaning up merged branches is recommended for your DevOps Specialist's fragile sanity.
Click Settings > General (selected automatically)
Pull Requests:
[uncheck] Allow merge commits
[check] Allow squash merging
Default to pull request title
[uncheck] Allow rebase merging
[check] Always suggest updating pull request branches
[uncheck] Allow auto-merge
[check] Automatically delete head branches
Packages are available from your repository (link on right). All should have visibility set to public for the workflows to run successfully.
E.g. https://github.com/bcgov/quickstart-openshift/packages
This is required to prevent direct pushes and merges to the default branch. These steps must be run after one full pull request pipeline has been run to populate the required status checks.
Settings
(gear, top right) > Rules
> Rulesets
(under Code and Automation)New ruleset
> New branch ruleset
main
Active
+ Add bypass
[x] Repository admin
Add selected
Add target
Add default branch
[x] Restrict deletions
[x] Require linear history
[x] Require a pull request before merging
Require approvals: 1
(or more!)[x] Require conversation resolution before merging
[x] Require status checks to pass
[x] Require branches to be up to date before merging
+Add checks
Analysis Results
PR Results
Validate Results
[x] Block force pushes
[x] Require code scanning results
+ Add tool
CodeQL
Trivy
Create
Don't forget to add your team members!
Access
)Add people
or Add teams
Runs on pull request submission.
Runs on pull request submission.
Runs on pull request submission or merge to the default branch.
Runs on pull request close or merge.
latest
Runs on merge to main branch.
* excludes database changes
Runs on scheduled job (cronjob) or workflow dispatch.
There is a long-lived custom route available to be assigned to specific Pull Request deployments. Add the label demo
to that pull request or run the DEMO Route
workflow.
Typical route: https://<REPO_NAME>-demo.apps.silver.devops.gov.bc.ca
Please note that the label must be manually created using GitHub's web interface.
The starter stack includes a frontend (React, MUI, Vite, Caddy), backend (Nest/Node) and postgres or postgis database. See subfolder for source, including Dockerfiles and OpenShift templates. Alternative backends are available.
Features:
Postgis is default. Switch to Postgres by removing the image names in crunchy helm chart values
Crunchy is the default choice for HA postgres/postgis DB in BCGov. provided chart is to get up and going fast, it is upto teams to fine tune resource allocation and patroni parameters of crunchy DB to get the best out of database.
s3
DB Deployer in GHAThe sample Java, Python and Go backends repository has been archived, but we have lots of other great examples of active projects you can learn from!
The database documentation is created and deployed to GitHub pages. See here.
After a full workflow run and merge can been run, please do the following:
Code and automation
)Branch
or Add teams
gh-pages
Save
This repository is provided by NRIDS Architecture and Forestry Digital Services, courtesy of the Government of British Columbia.
Please contribute your ideas! Issues and Pull Requests are appreciated.