Files
pulse/.github/workflows/rc-release.yml
T

142 lines
5.5 KiB
YAML

name: Release Candidate
on:
push:
branches:
- develop
jobs:
create-rc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get version from package.json
id: version
run: |
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Check if RC release needed
id: check
run: |
# Get base version (remove any existing RC suffix)
BASE_VERSION=$(echo "${{ steps.version.outputs.version }}" | sed 's/-rc[0-9]*$//')
# Get the latest RC tag for this base version
LATEST_RC=$(git tag -l "v${BASE_VERSION}-rc*" | sort -V | tail -n1)
if [ -z "$LATEST_RC" ]; then
echo "rc_number=1" >> $GITHUB_OUTPUT
echo "create_release=true" >> $GITHUB_OUTPUT
echo "base_version=$BASE_VERSION" >> $GITHUB_OUTPUT
else
# Extract RC number and increment
RC_NUM=$(echo $LATEST_RC | grep -o 'rc[0-9]*' | grep -o '[0-9]*')
NEXT_RC=$((RC_NUM + 1))
# Check if there are new commits since last RC
COMMITS_SINCE=$(git rev-list --count $LATEST_RC..HEAD)
if [ "$COMMITS_SINCE" -gt 0 ]; then
echo "rc_number=$NEXT_RC" >> $GITHUB_OUTPUT
echo "create_release=true" >> $GITHUB_OUTPUT
echo "base_version=$BASE_VERSION" >> $GITHUB_OUTPUT
else
echo "create_release=false" >> $GITHUB_OUTPUT
fi
fi
- name: Update package.json with RC version
if: steps.check.outputs.create_release == 'true'
run: |
NEW_VERSION="${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}"
echo "Updating package.json version to: $NEW_VERSION"
# Update package.json version
node -e "
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
pkg.version = '$NEW_VERSION';
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
"
# Configure git
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# Commit the version change
git add package.json
git commit -m "chore: bump version to $NEW_VERSION for RC release"
git push origin develop
- name: Set up Docker Buildx
if: steps.check.outputs.create_release == 'true'
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
if: steps.check.outputs.create_release == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker images
if: steps.check.outputs.create_release == 'true'
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
rcourtman/pulse:v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}
rcourtman/pulse:rc
- name: Create Release Archive
if: steps.check.outputs.create_release == 'true'
run: |
# Create release tarball
tar -czf pulse-v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}.tar.gz \
--exclude=node_modules \
--exclude=.git \
--exclude=.env \
--exclude=data \
--exclude=*.log \
--exclude=temp-release \
server src scripts package.json package-lock.json README.md LICENSE CHANGELOG.md \
docker-compose.yml Dockerfile
- name: Create RC Release
if: steps.check.outputs.create_release == 'true'
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}
name: v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}
prerelease: true
generate_release_notes: true
files: pulse-v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}.tar.gz
body: |
## 🧪 Release Candidate ${{ steps.check.outputs.rc_number }}
This is a release candidate for testing. Please report any issues you find.
### 📦 Installation Options
#### Script Install (Recommended)
```bash
wget -qO- https://github.com/rcourtman/Pulse/releases/download/v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}/install-pulse.sh | bash
```
#### Docker
```bash
docker pull rcourtman/pulse:v${{ steps.check.outputs.base_version }}-rc${{ steps.check.outputs.rc_number }}
# or use the rolling RC tag
docker pull rcourtman/pulse:rc
```
### ⚠️ Testing Notes
- This is a pre-release for testing only
- Not recommended for production use
- Please report issues on GitHub
- The `:rc` Docker tag always points to the latest RC