Skip to content

Release DevWorkspace Operator #114

Release DevWorkspace Operator

Release DevWorkspace Operator #114

Workflow file for this run

name: Release DevWorkspace Operator
on:
workflow_dispatch:
inputs:
version:
description: 'version in format v0.y.z'
required: true
prerelease:
description: If true, prerelease will be done, otherwise release
required: true
forceRecreateTags:
description: If true, tags will be recreated. Use with caution
required: false
default: 'false'
dryrun:
description: If true, dry-run will be executed - no result are pushed
required: false
default: 'false'
jobs:
release:
env:
OPERATOR_SDK_VERSION: v1.8.0
OPM_VERSION: v1.19.5
runs-on: ubuntu-20.04
steps:
- name: Set up Go 1.x
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
with:
go-version: 1.20.10
- name: Set up QEMU
uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 #v2.2.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 #v2.10.0
- name: Clone source code
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
with:
fetch-depth: 0
- name: Check existing tags
run: |
set +e
RECREATE_TAGS=${{ github.event.inputs.forceRecreateTags }}
VERSION=${{ github.event.inputs.version }}
EXISTING_TAG=$(git ls-remote --exit-code origin refs/tags/${VERSION})
if [[ -n ${EXISTING_TAG} ]]; then
if [[ ${RECREATE_TAGS} == "true" ]]; then
echo "[INFO] Removing tag for ${VERSION} version. New tag will be recreated during release."
git push origin :$VERSION
else
echo "[ERROR] Cannot proceed with release - tag ${EXISTING_TAG} already exists."
exit 1
fi
else
echo "[INFO] No existing tags detected for $VERSION"
fi
- name: Cache Operator SDK ${{ env.OPERATOR_SDK_VERSION }}
uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.0
id: cache-operator-sdk
with:
path: ~/cache
key: operator-sdk-${{ env.OPERATOR_SDK_VERSION }}
- name: Download Operator SDK ${{ env.OPERATOR_SDK_VERSION }}
if: steps.cache-operator-sdk.outputs.cache-hit != 'true'
run: |
mkdir -p ~/cache
wget https://github.com/operator-framework/operator-sdk/releases/download/${OPERATOR_SDK_VERSION}/operator-sdk_linux_amd64 -O ~/cache/operator-sdk-${OPERATOR_SDK_VERSION} > /dev/null -O ~/cache/operator-sdk-${OPERATOR_SDK_VERSION} > /dev/null
chmod +x ~/cache/operator-sdk-${OPERATOR_SDK_VERSION}
- name: Install Operator SDK ${{ env.OPERATOR_SDK_VERSION }}
run: |
mkdir -p ~/bin
cp ~/cache/operator-sdk-${OPERATOR_SDK_VERSION} ~/bin/operator-sdk
echo "$HOME/bin" >> $GITHUB_PATH
- name: Cache OPM ${{ env.OPM_VERSION }}
uses: actions/cache@e12d46a63a90f2fae62d114769bbf2a179198b5c # v3.3.0
id: cache-opm
with:
path: ~/cache
key: opm-${{ env.OPM_VERSION }}
- name: Download OPM ${{ env.OPM_VERSION }}
if: steps.cache-opm.outputs.cache-hit != 'true'
run: |
mkdir -p ~/cache
wget https://github.com/operator-framework/operator-registry/releases/download/${OPM_VERSION}/linux-amd64-opm -O ~/cache/opm${OPM_VERSION} > /dev/null
#${OPM_VERSION} is used in binary name to prevent caching after upgrading
chmod +x ~/cache/opm${OPM_VERSION}
- name: Install OPM ${{ env.OPM_VERSION }}
run: |
mkdir -p ~/bin
cp ~/cache/opm${OPM_VERSION} ~/bin/opm
echo "$HOME/bin" >> $GITHUB_PATH
- name: Login to quay.io
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc #v2.2.0
with:
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }}
registry: quay.io
- name: Set up yq
uses: actions/setup-python@b64ffcaf5b410884ad320a9cfac8866006a109aa # v4.8.0
with:
python-version: 3.6
- name: Setup yq
run: |
python -m pip install --upgrade pip
pip install yq
cd ${GITHUB_WORKSPACE}
- name: Release
run: |
# Need to grab goimports otherwise formatting after this step will fail
# PR checks.
go install golang.org/x/tools/cmd/goimports@latest
git config --global user.name "Andrew Obuchowicz"
git config --global user.email "[email protected]"
export GITHUB_TOKEN=${{ secrets.CHE_INCUBATOR_BOT_GITHUB_TOKEN }}
RELEASE_COMMAND="./make-release.sh --version ${{ github.event.inputs.version }}"
if [[ "${{ github.event.inputs.prerelease }}" == "true" ]]; then
RELEASE_COMMAND="$RELEASE_COMMAND --prerelease"
else
RELEASE_COMMAND="$RELEASE_COMMAND --release"
fi
if [[ "${{ github.event.inputs.dry-run }}" == "true" ]]; then
RELEASE_COMMAND="$RELEASE_COMMAND --dry-run"
fi
$RELEASE_COMMAND