Update ci workflow
This commit is contained in:
parent
075a3dbded
commit
d53a92d00f
1 changed files with 27 additions and 76 deletions
|
|
@ -9,25 +9,35 @@ on:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-publish:
|
build-and-validate:
|
||||||
name: Build and Publish
|
name: Build and Validate
|
||||||
runs-on: ubuntu
|
runs-on: ubuntu
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Build Docker Image
|
||||||
|
run: |
|
||||||
|
docker build -t threejs-test:test .
|
||||||
|
|
||||||
|
- name: Validate Image
|
||||||
|
run: |
|
||||||
|
docker run --rm -d --name test-container -p 8080:80 threejs-test:test
|
||||||
|
sleep 2
|
||||||
|
curl -f http://localhost:8080 || exit 1
|
||||||
|
docker stop test-container
|
||||||
|
|
||||||
|
publish:
|
||||||
|
name: Publish to Registry
|
||||||
|
runs-on: ubuntu
|
||||||
|
needs: build-and-validate
|
||||||
|
if: github.event_name == 'push' || gitea.event_name == 'push'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # Fetch all history for tags
|
fetch-depth: 0 # Fetch all history for tags
|
||||||
|
|
||||||
- name: Check Docker availability
|
|
||||||
run: |
|
|
||||||
set -e
|
|
||||||
docker --version
|
|
||||||
docker info
|
|
||||||
|
|
||||||
- name: Setup Docker Buildx
|
|
||||||
run: |
|
|
||||||
docker buildx create --use || true
|
|
||||||
|
|
||||||
- name: Login to Registry
|
- name: Login to Registry
|
||||||
run: |
|
run: |
|
||||||
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.jusemon.com -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin
|
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.jusemon.com -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin
|
||||||
|
|
@ -35,13 +45,6 @@ jobs:
|
||||||
- name: Determine Version
|
- name: Determine Version
|
||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
# Get branch name (works for both GitHub and Forgejo)
|
|
||||||
BRANCH_NAME="${GITHUB_REF#refs/heads/}"
|
|
||||||
BRANCH_NAME="${BRANCH_NAME#refs/remotes/origin/}"
|
|
||||||
if [[ -z "$BRANCH_NAME" ]]; then
|
|
||||||
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get latest version tag
|
# Get latest version tag
|
||||||
LATEST_TAG=$(git describe --tags --match 'v*.*.*' --abbrev=0 2>/dev/null || echo "v0.0.0")
|
LATEST_TAG=$(git describe --tags --match 'v*.*.*' --abbrev=0 2>/dev/null || echo "v0.0.0")
|
||||||
LATEST_VERSION="${LATEST_TAG#v}"
|
LATEST_VERSION="${LATEST_TAG#v}"
|
||||||
|
|
@ -52,61 +55,18 @@ jobs:
|
||||||
MINOR=${MINOR:-0}
|
MINOR=${MINOR:-0}
|
||||||
PATCH=${PATCH:-0}
|
PATCH=${PATCH:-0}
|
||||||
|
|
||||||
# Determine version bump based on branch prefix
|
# Increment patch version for each merge to main, or start at 0.1.0 if no tags exist
|
||||||
if [[ "$BRANCH_NAME" == release/* ]]; then
|
if [[ "$LATEST_TAG" == "v0.0.0" ]]; then
|
||||||
# Release branch: use the version from branch name or bump minor
|
# First version
|
||||||
VERSION_FROM_BRANCH=$(echo "$BRANCH_NAME" | sed -n 's|release/\(.*\)|\1|p')
|
NEW_VERSION="0.1.0"
|
||||||
if [[ -n "$VERSION_FROM_BRANCH" && "$VERSION_FROM_BRANCH" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
||||||
NEW_VERSION="$VERSION_FROM_BRANCH"
|
|
||||||
else
|
|
||||||
MINOR=$((MINOR + 1))
|
|
||||||
PATCH=0
|
|
||||||
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
||||||
fi
|
|
||||||
elif [[ "$BRANCH_NAME" == feature/* ]]; then
|
|
||||||
# Feature branch: bump minor version
|
|
||||||
MINOR=$((MINOR + 1))
|
|
||||||
PATCH=0
|
|
||||||
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
||||||
elif [[ "$BRANCH_NAME" == bugfix/* ]] || [[ "$BRANCH_NAME" == hotfix/* ]]; then
|
|
||||||
# Bugfix/Hotfix: bump patch version
|
|
||||||
PATCH=$((PATCH + 1))
|
|
||||||
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
||||||
elif [[ "$BRANCH_NAME" == main ]]; then
|
|
||||||
# Main branch: increment patch version from latest tag, or start at 0.1.0 if no tags exist
|
|
||||||
if [[ "$LATEST_TAG" == "v0.0.0" ]]; then
|
|
||||||
# First version
|
|
||||||
NEW_VERSION="0.1.0"
|
|
||||||
else
|
|
||||||
# Increment patch version for each merge to main
|
|
||||||
PATCH=$((PATCH + 1))
|
|
||||||
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# Default: bump patch
|
# Increment patch version for each merge to main
|
||||||
PATCH=$((PATCH + 1))
|
PATCH=$((PATCH + 1))
|
||||||
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# For PRs, use a pre-release version
|
|
||||||
EVENT_NAME="${{ github.event_name }}"
|
|
||||||
if [[ -z "$EVENT_NAME" ]]; then
|
|
||||||
EVENT_NAME="${{ gitea.event_name }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$EVENT_NAME" == "pull_request" ]]; then
|
|
||||||
PR_NUMBER="${{ github.event.pull_request.number }}"
|
|
||||||
if [[ -z "$PR_NUMBER" ]]; then
|
|
||||||
PR_NUMBER="${{ gitea.event.pull_request.number }}"
|
|
||||||
fi
|
|
||||||
if [[ -n "$PR_NUMBER" ]]; then
|
|
||||||
NEW_VERSION="${NEW_VERSION}-pr${PR_NUMBER}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
|
||||||
echo "tag=v$NEW_VERSION" >> $GITHUB_OUTPUT
|
echo "tag=v$NEW_VERSION" >> $GITHUB_OUTPUT
|
||||||
echo "Branch: $BRANCH_NAME"
|
|
||||||
echo "Latest tag: $LATEST_TAG"
|
echo "Latest tag: $LATEST_TAG"
|
||||||
echo "New version: $NEW_VERSION"
|
echo "New version: $NEW_VERSION"
|
||||||
|
|
||||||
|
|
@ -116,15 +76,7 @@ jobs:
|
||||||
docker build -t "$IMAGE_NAME" .
|
docker build -t "$IMAGE_NAME" .
|
||||||
echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV
|
echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Validate Image
|
|
||||||
run: |
|
|
||||||
docker run --rm -d --name test-container -p 8080:80 "$IMAGE_NAME"
|
|
||||||
sleep 2
|
|
||||||
curl -f http://localhost:8080 || exit 1
|
|
||||||
docker stop test-container
|
|
||||||
|
|
||||||
- name: Push Docker Image
|
- name: Push Docker Image
|
||||||
if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main')
|
|
||||||
run: |
|
run: |
|
||||||
IMAGE_NAME="git.jusemon.com/jusemon/threejs-test:${{ steps.version.outputs.version }}"
|
IMAGE_NAME="git.jusemon.com/jusemon/threejs-test:${{ steps.version.outputs.version }}"
|
||||||
docker push "$IMAGE_NAME"
|
docker push "$IMAGE_NAME"
|
||||||
|
|
@ -134,7 +86,6 @@ jobs:
|
||||||
docker push "git.jusemon.com/jusemon/threejs-test:latest"
|
docker push "git.jusemon.com/jusemon/threejs-test:latest"
|
||||||
|
|
||||||
- name: Create Git Tag
|
- name: Create Git Tag
|
||||||
if: (github.event_name == 'push' || gitea.event_name == 'push') && (github.ref == 'refs/heads/main' || gitea.ref == 'refs/heads/main')
|
|
||||||
run: |
|
run: |
|
||||||
git config user.name "forgejo-actions"
|
git config user.name "forgejo-actions"
|
||||||
git config user.email "forgejo-actions@forgejo.io"
|
git config user.email "forgejo-actions@forgejo.io"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue