Skip to content

Create release

Create release #7

Workflow file for this run

name: Create release
# example: gh workflow run release.yml -f tag_name=v1.1.4
on:
workflow_dispatch:
inputs:
tag_name:
type: string
required: true
description: Tag name with v prefix
splunk_versions:
type: string
required: true
description: Splunk compatible versions
default: 9.4,9.3,9.2,9.1,9.0,8.2,8.1,8.0,7.3,7.2,7.1,7.0
publish-to-splunkbase:
type: boolean
description: Publish to Splunkbase
default: true
jobs:
create-release:
name: Create release
runs-on: ubuntu-latest
permissions:
contents: write
env:
PACKAGE_NAME: "crowdsec-splunk-app.tar.gz"
steps:
- name: Check naming convention
run: |
VERIF=$(echo ${{ github.event.inputs.tag_name }} | grep -E "^v([0-9]{1,}\.)([0-9]{1,}\.)([0-9]{1,})(-(alpha|beta)\.[0-9]{1,})?$")
if [ ! ${VERIF} ]
then
echo "Tag name '${{ github.event.inputs.tag_name }}' does not comply with naming convention vX.Y.Z"
exit 1
fi
- name: Set version number without v
run: |
echo "VERSION_NUMBER=$(echo ${{ github.event.inputs.tag_name }} | sed 's/v//g' )" >> $GITHUB_ENV
- name: Clone sources
uses: actions/checkout@v4
- name: Check version ${{ env.VERSION_NUMBER }} consistency in files
# CHANGELOG.md, app.manifest, default/app.conf, appserver/static/javascript/setup_page.js
run: |
# Check top ## [VERSION_NUMBER](GITHUB_URL/releases/tag/vVERSION_NUMBER) - yyyy-mm-dd in CHANGELOG.md
# Example: ## [0.0.2](https://github.com/crowdsecurity/crowdsec-splunk-app/releases/tag/v0.0.2) - 2024-02-07
CURRENT_DATE=$(date +'%Y-%m-%d')
echo $CURRENT_DATE
CHANGELOG_VERSION=$(grep -o -E "## \[(.*)\].* - $CURRENT_DATE" CHANGELOG.md | head -1 | sed 's/ //g')
echo $CHANGELOG_VERSION
if [[ $CHANGELOG_VERSION == "##[${{ env.VERSION_NUMBER }}]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/v${{ env.VERSION_NUMBER }})-$CURRENT_DATE" ]]
then
echo "CHANGELOG VERSION OK"
else
echo "CHANGELOG VERSION KO"
echo $CHANGELOG_VERSION
exit 1
fi
# Check top [_Compare with previous release_](GITHUB_URL/compare/vLAST_TAG...vVERSION_NUMBER) in CHANGELOG.md
# Example: [_Compare with previous release_](https://github.com/crowdsecurity/crowdsec-splunk-app/compare/v0.0.1...v0.0.2)
COMPARISON=$(grep -oP "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/compare/\K(.*)$" CHANGELOG.md | head -1)
LAST_TAG=$(curl -Ls -o /dev/null -w %{url_effective} $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/latest | grep -oP "\/tag\/\K(.*)$")
if [[ $COMPARISON == "$LAST_TAG...v${{ env.VERSION_NUMBER }})" ]]
then
echo "VERSION COMPARISON OK"
else
echo "VERSION COMPARISON KO"
echo $COMPARISON
echo "$LAST_TAG...v${{ env.VERSION_NUMBER }})"
exit 1
fi
# Check in app.manifest
# Example: "version": "0.0.2"
MANIFEST_VERSION=$(grep -oP '"version": "\K(.*)(?=")' app.manifest | head -1)
if [[ $MANIFEST_VERSION == "${{ env.VERSION_NUMBER }}" ]]
then
echo "MANIFEST VERSION OK"
else
echo "MANIFEST VERSION KO"
echo $MANIFEST_VERSION
exit 1
fi
# Check in default/app.conf
# Example: version=1.0.6
APP_CONF_VERSION=$(sed -n 's/^version=\(.*\)/\1/p' default/app.conf | tr -d '\r' )
if [[ $APP_CONF_VERSION == "${{ env.VERSION_NUMBER }}" ]]
then
echo "app.conf VERSION OK"
else
echo "app.conf VERSION KO"
echo $APP_CONF_VERSION
exit 1
fi
# Check in appserver/static/javascript/setup_page.js
# Example: v=v1.0.6
JS_VERSION=$(sed -n 's/urlArgs\: "v=v\(.*\)"/\1/p' appserver/static/javascript/setup_page.js | sed 's/ //g' | tr -d '\r')
if [[ $JS_VERSION == "${{ env.VERSION_NUMBER }}" ]]
then
echo "appserver/static/javascript/setup_page.js VERSION OK"
else
echo "appserver/static/javascript/setup_page.js VERSION KO"
echo $JS_VERSION
exit 1
fi
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.9.16'
- name: Install splunk toolkit
run: |
curl https://download.splunk.com/misc/packaging-toolkit/splunk-packaging-toolkit-1.0.1.tar.gz -o /tmp/spl.tar.gz
pip install /tmp/spl.tar.gz
- name: Make package
run: |
# @see https://dev.splunk.com/enterprise/reference/packagingtoolkit/packagingtoolkitcli/
slim package .
cp crowdsec-splunk-app-*.tar.gz ./${{ env.PACKAGE_NAME }}
- name: Create Tag ${{ github.event.inputs.tag_name }}
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
github.rest.git.createRef({
owner: context.repo.owner,
repo: context.repo.repo,
ref: "refs/tags/${{ github.event.inputs.tag_name }}",
sha: context.sha
})
- name: Prepare release notes
run: |
# Retrieve release body and remove ---
VERSION_RELEASE_NOTES=$(awk -v ver="[${{ env.VERSION_NUMBER }}]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/v${{ env.VERSION_NUMBER }})" '/^## / { if (p) { exit }; if ($2 == ver) { p=1; next} } p && NF' CHANGELOG.md | sed ':a;N;$!ba;s/\n---/ /g')
echo "$VERSION_RELEASE_NOTES" >> CHANGELOG.txt
- name: Create release ${{ env.VERSION_NUMBER }}
uses: softprops/action-gh-release@v2
with:
files: ${{ env.PACKAGE_NAME }}
body_path: CHANGELOG.txt
name: ${{ env.VERSION_NUMBER }}
tag_name: ${{ github.event.inputs.tag_name }}
- name: Upload to SplunkBase
if: github.event.inputs.publish-to-splunkbase == 'true'
run: |
curl -u "${{ secrets.SPLUNKBASE_USERNAME }}:${{ secrets.SPLUNKBASE_PASSWORD }}" --request POST \
"https://splunkbase.splunk.com/api/v1/app/6800/new_release/" \
-F "files[]=@${{ env.PACKAGE_NAME }}" \
-F "filename=${{ env.PACKAGE_NAME }}" \
-F "cim_versions=5.x" \
-F "splunk_versions=${{ github.event.inputs.splunk_versions }}" \
-F "visibility=true"