Show how to run the release in GitHub workflow

Enter the new world of GitHub actions [1]/GitLab pipelines [2]. This
simplifies our end of the infrastructure considerably:

* No need any more to set up webhooks, all the relevant configuration
  is right in the workflow file.

* Does not need any infrastructure on our side any more, and thus works
  for third-party projects. They just need to set up their own secrets.

* GitHub automatically provides a temporary `GITHUB_TOKEN` with
  sufficient write access to the project to publish a release, so we
  don't need to carry around that secret. Thus if your project only
  releases to GitHub, there is zero secrets management.

Also adjust cockpituous-release a bit (update Fedora version, fix
project name copy-pasta), point to the action workflow and necessary
secrets.

Closes #380
This commit is contained in:
Martin Pitt 2020-10-13 08:04:37 +02:00 committed by Martin Pitt
parent 499eca014b
commit 2a51e057d7
3 changed files with 53 additions and 12 deletions

35
.github/workflows/release.yml.disabled vendored Normal file
View file

@ -0,0 +1,35 @@
name: release
on:
push:
tags:
# this is a glob, not a regexp
- '[0-9]*'
jobs:
cockpituous:
runs-on: ubuntu-latest
container:
image: docker.io/cockpit/release
steps:
- name: Set up configuration and secrets
run: |
# override GitHub's bind mount from host, we don't want anything from there and it interferes with ssh
export HOME=$(getent passwd $(id -u) | cut -f6 -d:)
# secrets come from https://github.com/organizations/ORGNAME/settings/secrets or https://github.com/OWNER/REPO/settings/secrets
# see https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets
echo '${{ secrets.SSH_KNOWN_HOSTS }}' > ~/.ssh/known_hosts
echo '${{ secrets.FEDPKG_SSH_PUBLIC }}' > ~/.ssh/id_rsa.pub
echo '${{ secrets.FEDPKG_SSH_PRIVATE }}' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
# FIXME: Set your Fedora user account name here
echo 'yourfedorauser' > ~/.config/bodhi-user
echo '${{ secrets.GITHUB_TOKEN }}' > ~/.config/github-token
echo '${{ secrets.COPR_TOKEN }}' > ~/.config/copr
echo '${{ secrets.FEDORA_PASSWORD }}' > ~/.fedora-password
- name: Run cockpituous
run: |
# override GitHub's bind mount from host, we don't want anything from there and it interferes with ssh
export HOME=$(getent passwd $(id -u) | cut -f6 -d:)
cd /build
release-runner -r https://github.com/$GITHUB_REPOSITORY -t $(basename $GITHUB_REF) ./cockpituous-release

View file

@ -96,12 +96,12 @@ that. [Cockpituous release](https://github.com/cockpit-project/cockpituous/tree
aims to fully automate project releases to GitHub, Fedora, Ubuntu, COPR, Docker aims to fully automate project releases to GitHub, Fedora, Ubuntu, COPR, Docker
Hub, and other places. The intention is that the only manual step for releasing Hub, and other places. The intention is that the only manual step for releasing
a project is to create a signed tag for the version number; pushing the tag a project is to create a signed tag for the version number; pushing the tag
then triggers a GitHub webhook that calls a set of release scripts (on then triggers a [GitHub action](https://github.com/features/actions) that calls a set of release scripts.
Cockpit's CI infrastructure).
starter-kit includes an example [cockpitous release script](./cockpituous-release) starter-kit includes an example [cockpitous release script](./cockpituous-release),
that builds an upstream release tarball and source RPM. Please see the above with detailed comments how to use it. There is also an
cockpituous documentation for details. [example GitHub release action](.github/workflows/release.yml.disabled) to set
up secrets and run cockpituous.
# Further reading # Further reading

View file

@ -1,4 +1,4 @@
# This is a script run to release welder-web through Cockpituous: # This is a script run to release this project through Cockpituous:
# https://github.com/cockpit-project/cockpituous/tree/master/release # https://github.com/cockpit-project/cockpituous/tree/master/release
# Anything that start with 'job' may run in a way that it SIGSTOP's # Anything that start with 'job' may run in a way that it SIGSTOP's
@ -6,6 +6,9 @@
# order to complete its work. # order to complete its work.
# #
# Check cockpituous documentation for available release targets. # Check cockpituous documentation for available release targets.
#
# This gets run through a GitHub action: enable and adjust
# .github/workflows/release.yml.disabled once you are ready.
RELEASE_SOURCE="_release/source" RELEASE_SOURCE="_release/source"
RELEASE_SPEC="cockpit-starter-kit.spec" RELEASE_SPEC="cockpit-starter-kit.spec"
@ -14,18 +17,21 @@ RELEASE_SRPM="_release/srpm"
job release-source job release-source
job release-srpm -V job release-srpm -V
# Once you have a Fedora package and add the https://pagure.io/user/cockpit # Once you have a Fedora package, can upload to Fedora automatically: Provide the
# user to your project's maintainers, you can also upload to Fedora automatically: # secrets in .github/workflows/release.yml on GitHub, and enable the following:
## Authenticate for pushing into Fedora dist-git (works in Cockpituous release container) ## Authenticate for pushing into Fedora dist-git
# cat ~/.fedora-password | kinit cockpit@FEDORAPROJECT.ORG # cat ~/.fedora-password | kinit yourfedorauser@FEDORAPROJECT.ORG
## Do fedora builds for the tag, using tarball ## Do fedora builds for the tag, using tarball
# job release-koji -k master # job release-koji -k master
# job release-koji f29 # job release-koji f33
# job release-bodhi F29 # job release-bodhi F33
# These are likely the first of your release targets; but run them after Fedora uploads, # These are likely the first of your release targets; but run them after Fedora uploads,
# so that failures there will fail the release early, before publishing on GitHub # so that failures there will fail the release early, before publishing on GitHub
# this needs no explicit secrets, just the GitHub action provided default one
# job release-github # job release-github
# This needs secrets.COPR_TOKEN in .github/workflows/release.yml
# job release-copr @myorg/myrepo # job release-copr @myorg/myrepo