Deployment pipeline using GitHub Actions

Note: This page plays role mostly of the internal guideline for Rafał Wrzeszcz - Wrzasq.pl projects, but it's rather generic, and you can re-use the same flow with your own projects.

Concept

Actions

Our current deployment involves following specific actions:

  • Signing artifacts with GPG key.
  • Publishing artifacts (together with GPG checksums) to Sonatype Nexus.
  • Publishing GitHub page.
  • Creating Git tag.

Approach

Each commit to master should trigger roll-out of a next iterative version. Pipeline should handle versioning, tagging and releasing artifacts to repositories (including site generation)

Deployment pipeline will automatically increase release number. If new major or minor release is to be performed, version needs to be set manually before committing files (in pom.xml of root module).

Setup

As the deployment process relies on some sensitive data, like Sonatype credentials, GitHub token etc., to pass them safely into the build we use secrets from the feature of GitHub Actions (both on organization and repository level).

Note: Everything related to GitHub Actions pipeline should go into .github/ subdirectory.

Note: Never, ever commit unencrypted keys to the repositories (not even private ones)!

Environment variables

To pass the sensitive data into deployment pipeline we use secrets variables. Following environment variables are defined:

  • OSSRH_USERNAME - Sonatype deployments account login;
  • OSSRH_PASSWORD - Sonatype deployments account password;
  • GPG_PASSPHRASE - password for GPG key;
  • GPG_PRIVATE_KEY - GPG private key;
  • GITHUB_ACTOR (specific for each GitHub action run) - GitHub access username, used for deployment purposes;
  • GITHUB_TOKEN (specific for each GitHub action run) - GitHub access token, used for deployment purposes.

They are (except GITHUB_ACTOR and GITHUB_TOKEN, which is provided by GitHub Actions) stored as secret variables in organization or repository respectively.