mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-22 03:04:03 +00:00
142 lines
5.5 KiB
YAML
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 |