Skip to content

Commit

Permalink
OCM-7256 | chore: set up release action
Browse files Browse the repository at this point in the history
ciaranRoche committed Apr 25, 2024
1 parent fd5a50b commit c5ba3b4
Showing 9 changed files with 179 additions and 32 deletions.
137 changes: 137 additions & 0 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
name: Publish release

on:
push:
tags:
- '*'

jobs:

release:
name: Publish release
runs-on: ubuntu-latest
steps:
- name: Checkout the source
uses: actions/checkout@v2

- name: Setup Python
uses: actions/setup-python@v3
with:
python-version: '3.10'
cache: 'pip'

- name: Install Python modules
run: pip install -r .github/workflows/requirements.txt

- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: '1.17'

- name: Create release
shell: python
run: |
import os
import re
import requests
import shutil
import subprocess
# Get the context and secret data that we will need:
repository = "${{ github.repository }}"
reference = "${{ github.ref }}"
token = "${{ secrets.GITHUB_TOKEN }}"
# Calculate the version number:
version = re.sub(r"^refs/tags/v(.*)$", r"\1", reference)
# Make sure that the assets directory exists and is empty:
assets = "assets"
shutil.rmtree(assets, ignore_errors=True)
os.mkdir(assets)
def build(goos: str, goarch: str):
# Set the environment variables that tell the Go compiler which
# operating system and architecture to build for:
env = dict(os.environ)
env["GOOS"] = goos
env["GOARCH"] = goarch
# Build the binary:
args = ["make", "cmds"]
subprocess.run(check=True, env=env, args=args)
# Copy the generated binary to the assets directory:
binary = "ocm-support"
if goos == "windows":
binary += ".exe"
asset = os.path.join(assets, f"ocm-support-{goos}-{goarch}")
os.rename(binary, asset)
# Build for the supported operating systems and architectures:
build("darwin", "amd64")
build("linux", "amd64")
build("linux", "arm64")
build("linux", "ppc64le")
build("linux", "s390x")
build("windows", "amd64")
# Calculate the SHA256 digests:
for asset in os.listdir(assets):
digest = os.path.join(assets, f"{asset}.sha256")
with open(digest, "wb") as stream:
args = ["sha256sum", asset]
subprocess.run(check=True, cwd=assets, stdout=stream, args=args)
# Get the list of changes:
body = ""
with open("CHANGES.md", "r") as stream:
while True:
line = stream.readline()
if line == "" or line.startswith("## " + version):
break
while True:
line = stream.readline()
if line == "" or line.startswith("## "):
break
body += line
# Send the request to create the release:
response = requests.post(
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Accept": "application/json",
},
json={
"tag_name": f"v{version}",
"name": f"Release {version}",
"body": body,
},
url=(
"https://api.github.com"
f"/repos/{repository}/releases"
),
)
response.raise_for_status()
# Get the release identifier:
release = response.json()["id"]
# Upload the assets:
for asset in os.listdir(assets):
file = os.path.join(assets, asset)
with open(file, "rb") as stream:
response = requests.post(
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/octet-stream",
"Accept": "application/json",
},
data=stream,
url=(
"https://uploads.github.com"
f"/repos/{repository}/releases/{release}/assets?name={asset}"
),
)
response.raise_for_status()
3 changes: 3 additions & 0 deletions .github/workflows/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# This file lists the Python dependencies used by the GitHub actions.

requests
8 changes: 0 additions & 8 deletions .idea/.gitignore

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/modules.xml

This file was deleted.

9 changes: 0 additions & 9 deletions .idea/rosa-support.iml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## Changes
This document describes the relevant changes between releases of the CLI

## 0.0.1
- Add version command
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
# ROSA Support
`rosa-support` is a tool designed to be a plugin to the [ROSA CLI](https://github.com/openshift/rosa) by adding useful commands for engineers to support and develop the CLI

## Build
To build the binary run
```
$ make build
```
To install the binary run onto your `$GOPATH`
```
$ make install
```

## Releases a new CLI Version
Releasing a new version requires submitting an MR for review/merge with an update to Version constant in [version.go](pkg/version/version.go).
Additionally. update the [CHANGES.md](CHANGES.md) file to include the new version and describe all changes included

Below is an example CHANGES.md update:
```
## 0.0.1
- Added an awesome change
```

Submit an MR for review/merge with the CHANGES.md and version.go update.

Finally, create and submit a new tag with the new version following the below example:

```shell
git checkout main
git pull
git tag -a -m 'Release 0.0.1' v0.0.1
git push origin v0.0.1
```

Note that a repository administrator may need to push the tag to the repository due to access restrictions.
2 changes: 1 addition & 1 deletion pkg/version/version.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package version

const Version = "0.0.0"
const Version = "0.0.1"

var VersionStamp string

0 comments on commit c5ba3b4

Please sign in to comment.