Compare commits

...

4 Commits

Author SHA1 Message Date
d.viti
20c9d2eaf4 Simplify Helm versioning to always use Chart.yaml version
Some checks failed
Helm Chart Build and Release / lint-only (push) Has been skipped
Helm Chart Build and Release / build-and-release-helm (push) Failing after 11s
Build and Deploy / build-web (push) Successful in 37s
Build and Deploy / build-api (push) Successful in 36s
- Removed automatic version generation from tags or timestamps
- Always use version directly from Chart.yaml (single source of truth)
- Tag triggers now only determine if it's a release (not version)
- Release is triggered when tag matches Chart.yaml version
- Manual dispatch version is now for validation only
- Removed version modification during packaging
- Simplified packaging process to use Chart's own version
- Removed --devel flag as all versions are now stable
- Better separation: version managed in Chart.yaml, release triggered by tags
2025-10-03 02:37:50 +02:00
d.viti
a379b26808 Consolidate all Helm build and release tasks into single workflow
- Removed build-helm job from build.yml (Docker builds only now)
- Created comprehensive helm-release.yml that handles:
  - Development builds on main branch pushes (with dev suffix)
  - Release builds on version tags (v*.*.*)
  - Manual releases via workflow_dispatch
  - PR linting without publishing
- Added intelligent version detection:
  - Development versions get timestamp suffix
  - Release versions use clean semver
  - Manual dispatch can specify custom version
- Improved release process with proper Gitea API integration
- Added conditional release creation only for tagged versions
- Updated README to document the new workflow structure
- Separated concerns: build.yml for Docker, helm-release.yml for Helm
2025-10-03 02:35:16 +02:00
d.viti
f9d529ac87 Rename Helm chart to api7ee-demo-k8s
- Changed chart name from api7ee to api7ee-demo-k8s in Chart.yaml
- Renamed helm/api7ee directory to helm/api7ee-demo-k8s
- Updated all references in build.yml workflow
- Updated all references in helm-release.yml workflow
- Updated main README.md with new chart name
- Updated Helm chart README with new chart name
- Verified all old references have been replaced
- Chart packages correctly as api7ee-demo-k8s-{version}.tgz
2025-10-03 02:31:23 +02:00
d.viti
fb396ac71a Fix Helm chart build workflow issues
- Removed unnecessary helm dependency update (no dependencies defined)
- Modified packaging to use a temporary copy of the chart
- This prevents sed modifications from affecting the lint step
- Ensures Chart.yaml version field remains intact
- Added debug output for chart version verification
2025-10-03 02:27:26 +02:00
27 changed files with 166 additions and 150 deletions

View File

@@ -79,68 +79,3 @@ jobs:
labels: ${{ steps.meta-api.outputs.labels }}
cache-from: type=registry,ref=${{ vars.PACKAGES_REGISTRY || gitea.server_url }}/${{ gitea.repository }}/api:buildcache
cache-to: type=registry,ref=${{ vars.PACKAGES_REGISTRY || gitea.server_url }}/${{ gitea.repository }}/api:buildcache,mode=max
build-helm:
runs-on: ubuntu-latest
needs: [build-web, build-api]
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for proper versioning
- name: Install Helm
uses: azure/setup-helm@v3
with:
version: "latest"
- name: Update Chart dependencies
run: |
cd helm/api7ee
helm dependency update
- name: Lint Helm chart
run: |
helm lint helm/api7ee/
- name: Package Helm chart
run: |
# Get version from Chart.yaml
CHART_VERSION=$(grep '^version:' helm/api7ee/Chart.yaml | awk '{print $2}')
# Update image registry and repository in values.yaml to match Gitea
sed -i "s|registry: gitea.server_url|registry: ${{ gitea.server_url }}|g" helm/api7ee/values.yaml
sed -i "s|repository: gitea.repository/|repository: ${{ gitea.repository }}/|g" helm/api7ee/values.yaml
# Package the chart
helm package helm/api7ee/ --version ${CHART_VERSION}
# Store chart filename for later use
echo "CHART_FILE=api7ee-${CHART_VERSION}.tgz" >> $GITHUB_ENV
- name: Push Helm chart to Gitea Package Registry
run: |
# Upload Helm chart to Gitea package registry
# Format: https://{gitea-server}/api/packages/{owner}/helm/api/charts
curl --fail-with-body \
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-X POST \
-F "chart=@${CHART_FILE}" \
https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm/api/charts
echo "✅ Helm chart pushed successfully to Gitea Package Registry"
echo "📦 Chart: ${CHART_FILE}"
echo "🔗 Registry URL: https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm"
- name: Create Helm index
if: success()
run: |
# Create or update the Helm repository index
echo "📝 Helm chart repository information:"
echo "To add this repository:"
echo " helm repo add api7ee https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm"
echo " helm repo update"
echo ""
echo "To install the chart:"
echo " helm install my-api7ee api7ee/api7ee"

View File

@@ -1,20 +1,29 @@
name: Helm Chart Release
name: Helm Chart Build and Release
on:
push:
branches: [main]
tags:
- 'v*.*.*' # Trigger release if tag matches Chart.yaml version
pull_request:
branches: [main]
workflow_dispatch:
inputs:
version:
description: 'Expected Chart.yaml version (for validation only)'
required: false
type: string
jobs:
release-helm:
build-and-release-helm:
runs-on: ubuntu-latest
# Only run on main branch pushes or tags (not on PRs)
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-depth: 0 # Fetch all history for proper versioning
- name: Install Helm
uses: azure/setup-helm@v3
@@ -24,48 +33,99 @@ jobs:
- name: Determine version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
# Always get version from Chart.yaml
VERSION=$(grep '^version:' helm/api7ee-demo-k8s/Chart.yaml | awk '{print $2}')
# Determine if this is a release based on triggers
IS_RELEASE="false"
# Check if this is a tag push that matches the chart version
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
TAG_VERSION=${GITEA_REF_NAME#v}
if [ "$TAG_VERSION" = "$VERSION" ]; then
IS_RELEASE="true"
echo "📌 Release version (tag matches Chart.yaml): ${VERSION}"
else
echo "⚠️ Warning: Tag version ($TAG_VERSION) doesn't match Chart.yaml version ($VERSION)"
echo "📌 Using Chart.yaml version: ${VERSION}"
fi
elif [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.version }}" ]; then
# Manual trigger with version - treat as release if version matches
INPUT_VERSION="${{ github.event.inputs.version }}"
if [ "$INPUT_VERSION" = "$VERSION" ]; then
IS_RELEASE="true"
echo "📌 Manual release for version: ${VERSION}"
else
echo "⚠️ Warning: Input version ($INPUT_VERSION) doesn't match Chart.yaml version ($VERSION)"
echo "📌 Using Chart.yaml version: ${VERSION}"
fi
else
# Extract version from tag (remove 'v' prefix)
VERSION=${GITEA_REF_NAME#v}
echo "📌 Development build with version: ${VERSION}"
fi
echo "VERSION=${VERSION}"
# Export for subsequent steps
echo "VERSION=${VERSION}" >> $GITHUB_ENV
echo "📌 Chart version: ${VERSION}"
- name: Update Chart version
run: |
# Update Chart.yaml with the new version
sed -i "s/^version:.*/version: ${VERSION}/" helm/api7ee/Chart.yaml
# Update appVersion to match
sed -i "s/^appVersion:.*/appVersion: \"${VERSION}\"/" helm/api7ee/Chart.yaml
# Update image tags in values.yaml to use this version
sed -i "s|tag: \"main\"|tag: \"v${VERSION}\"|g" helm/api7ee/values.yaml
# Update registry and repository to Gitea values
sed -i "s|registry: gitea.server_url|registry: ${{ gitea.server_url }}|g" helm/api7ee/values.yaml
sed -i "s|repository: gitea.repository/|repository: ${{ gitea.repository }}/|g" helm/api7ee/values.yaml
echo "📝 Updated Chart.yaml and values.yaml with version ${VERSION}"
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_ENV
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "is_release=${IS_RELEASE}" >> $GITHUB_OUTPUT
- name: Lint Helm chart
run: |
helm lint helm/api7ee/
helm lint helm/api7ee-demo-k8s/
- name: Prepare Helm chart for packaging
run: |
# Create a temporary copy of the chart for packaging
cp -r helm/api7ee-demo-k8s /tmp/api7ee-demo-k8s-chart
# Update image registry and repository to match Gitea
sed -i "s|registry: gitea.server_url|registry: ${{ gitea.server_url }}|g" /tmp/api7ee-demo-k8s-chart/values.yaml
sed -i "s|repository: gitea.repository/|repository: ${{ gitea.repository }}/|g" /tmp/api7ee-demo-k8s-chart/values.yaml
# For releases, update image tags to use the version tag
if [ "${IS_RELEASE}" = "true" ]; then
# Update image tags to use the release version
sed -i "s|tag: \"main\"|tag: \"v${VERSION}\"|g" /tmp/api7ee-demo-k8s-chart/values.yaml
echo "📝 Chart prepared for release with version ${VERSION}"
else
# Keep main tag for development builds
echo "📝 Chart prepared for development with version ${VERSION}"
fi
- name: Package Helm chart
run: |
helm package helm/api7ee/ --version ${VERSION}
echo "CHART_FILE=api7ee-${VERSION}.tgz" >> $GITHUB_ENV
# Package using the version from Chart.yaml
helm package /tmp/api7ee-demo-k8s-chart
# Generate chart README with installation instructions
cat > CHART_README.md << EOF
# API7 Enterprise Edition Helm Chart v${VERSION}
# Store chart filename for later use
echo "CHART_FILE=api7ee-demo-k8s-${VERSION}.tgz" >> $GITHUB_ENV
## Installation
echo "📦 Packaged chart: api7ee-demo-k8s-${VERSION}.tgz"
- name: Push Helm chart to Gitea Package Registry
run: |
# Upload Helm chart to Gitea package registry
echo "📤 Uploading chart to Gitea Package Registry..."
curl --fail-with-body \
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-X POST \
-F "chart=@${CHART_FILE}" \
https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm/api/charts
echo "✅ Helm chart pushed successfully to Gitea Package Registry"
echo "📦 Chart: ${CHART_FILE}"
echo "🔗 Registry URL: https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm"
- name: Create Release (for tagged versions only)
if: env.IS_RELEASE == 'true'
run: |
echo "🎉 Creating release for version ${VERSION}"
# Generate release notes
cat > RELEASE_NOTES.md << EOF
## Helm Chart Release v${VERSION}
### Installation
\`\`\`bash
# Add the Helm repository
@@ -73,54 +133,46 @@ jobs:
helm repo update
# Install the chart
helm install my-api7ee api7ee/api7ee --version ${VERSION}
helm install my-api7ee api7ee/api7ee-demo-k8s --version ${VERSION}
# Install with custom values
helm install my-api7ee api7ee/api7ee --version ${VERSION} -f values.yaml
helm install my-api7ee api7ee/api7ee-demo-k8s --version ${VERSION} -f values.yaml
\`\`\`
## Upgrade
### Upgrade
\`\`\`bash
helm upgrade my-api7ee api7ee/api7ee --version ${VERSION}
helm upgrade my-api7ee api7ee/api7ee-demo-k8s --version ${VERSION}
\`\`\`
## Docker Images
### Docker Images
This chart uses the following Docker images:
- Web: \`${{ gitea.server_url }}/${{ gitea.repository }}/web:v${VERSION}\`
- API: \`${{ gitea.server_url }}/${{ gitea.repository }}/api:v${VERSION}\`
### Chart Download
Direct download: [api7ee-demo-k8s-${VERSION}.tgz](https://${{ gitea.server_url }}/${{ gitea.repository }}/releases/download/v${VERSION}/api7ee-demo-k8s-${VERSION}.tgz)
EOF
- name: Push Helm chart to Gitea Package Registry
run: |
# Upload versioned Helm chart
curl --fail-with-body \
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-X POST \
-F "chart=@${CHART_FILE}" \
https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm/api/charts
echo "✅ Helm chart v${VERSION} pushed to Gitea Package Registry"
- name: Create Release
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: |
# Create release using Gitea API
RELEASE_DATA=$(cat <<EOF
{
"tag_name": "v${VERSION}",
"target_commitish": "${{ gitea.sha }}",
"name": "v${VERSION}",
"body": "## Helm Chart Release v${VERSION}\n\n### Installation\n\`\`\`bash\nhelm repo add api7ee https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm\nhelm repo update\nhelm install my-api7ee api7ee/api7ee --version ${VERSION}\n\`\`\`\n\n### Docker Images\n- Web: \`${{ gitea.server_url }}/${{ gitea.repository }}/web:v${VERSION}\`\n- API: \`${{ gitea.server_url }}/${{ gitea.repository }}/api:v${VERSION}\`\n\n### Chart Package\n- Download: [api7ee-${VERSION}.tgz](https://${{ gitea.server_url }}/${{ gitea.repository }}/releases/download/v${VERSION}/api7ee-${VERSION}.tgz)",
"draft": false,
"prerelease": false
}
EOF
)
RELEASE_DATA=$(jq -n \
--arg tag "v${VERSION}" \
--arg name "v${VERSION}" \
--arg body "$(cat RELEASE_NOTES.md)" \
--arg target "${{ gitea.sha }}" \
'{
tag_name: $tag,
target_commitish: $target,
name: $name,
body: $body,
draft: false,
prerelease: false
}')
# Create the release
RELEASE_RESPONSE=$(curl -X POST \
RELEASE_RESPONSE=$(curl -s -X POST \
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-H "Content-Type: application/json" \
-d "${RELEASE_DATA}" \
@@ -137,14 +189,14 @@ jobs:
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-H "Content-Type: application/gzip" \
--data-binary "@${CHART_FILE}" \
"https://${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${RELEASE_ID}/assets?name=api7ee-${VERSION}.tgz"
"https://${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${RELEASE_ID}/assets?name=api7ee-demo-k8s-${VERSION}.tgz"
# Upload README as release asset
# Upload release notes as asset
curl -X POST \
-H "Authorization: token ${{ secrets.PACKAGES_PUSH_TOKEN }}" \
-H "Content-Type: text/markdown" \
--data-binary "@CHART_README.md" \
"https://${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${RELEASE_ID}/assets?name=CHART_README.md"
--data-binary "@RELEASE_NOTES.md" \
"https://${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${RELEASE_ID}/assets?name=RELEASE_NOTES.md"
echo "✅ Release assets uploaded successfully"
else
@@ -154,9 +206,11 @@ jobs:
- name: Summary
run: |
echo "## 🎉 Helm Chart Release Summary"
echo "## 🎉 Helm Chart Build Summary"
echo ""
echo "- **Version:** v${VERSION}"
echo "- **Version:** ${VERSION}"
echo "- **Type:** $([ "${IS_RELEASE}" = "true" ] && echo "Release" || echo "Development Build")"
echo "- **Source:** Chart.yaml version (not modified)"
echo "- **Chart:** ${CHART_FILE}"
echo "- **Registry:** https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm"
echo ""
@@ -164,5 +218,24 @@ jobs:
echo '```bash'
echo "helm repo add api7ee https://${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/helm"
echo "helm repo update"
echo "helm install my-api7ee api7ee/api7ee --version ${VERSION}"
echo "helm install my-api7ee api7ee/api7ee-demo-k8s --version ${VERSION}"
echo '```'
lint-only:
runs-on: ubuntu-latest
# Only run on PRs
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install Helm
uses: azure/setup-helm@v3
with:
version: "latest"
- name: Lint Helm chart
run: |
echo "🔍 Linting Helm chart for PR..."
helm lint helm/api7ee-demo-k8s/
echo "✅ Helm chart linting passed"

View File

@@ -89,12 +89,20 @@ docker run -p 8001:8000 api-app
### Automated Pipeline
The `.gitea/workflows/build.yml` pipeline automatically:
The CI/CD workflows automatically:
**`.gitea/workflows/build.yml`**:
1. Builds Docker images for both applications
2. Pushes to Gitea container registry
3. Tags images with branch name
4. Packages and publishes Helm chart
5. Implements layer caching for faster builds
4. Implements layer caching for faster builds
**`.gitea/workflows/helm-release.yml`**:
1. Packages Helm charts on every main branch push
2. Creates development versions for main branch builds
3. Creates release versions for tags (v*.*.*)
4. Publishes charts to Gitea Helm registry
5. Creates GitHub releases for tagged versions
**Triggers:**
- Any branch push (Docker images)
@@ -149,13 +157,13 @@ helm repo update
```bash
# Install with default values
helm install my-api7ee api7ee/api7ee --namespace api7ee --create-namespace
helm install my-api7ee api7ee/api7ee-demo-k8s --namespace api7ee --create-namespace
# Install with custom values
helm install my-api7ee api7ee/api7ee -f custom-values.yaml --namespace api7ee
helm install my-api7ee api7ee/api7ee-demo-k8s -f custom-values.yaml --namespace api7ee
# Install with specific image tags
helm install my-api7ee api7ee/api7ee \
helm install my-api7ee api7ee/api7ee-demo-k8s \
--set web.image.tag=v1.0.0 \
--set api.image.tag=v1.0.0 \
--namespace api7ee
@@ -178,7 +186,7 @@ Key Helm values:
```bash
# Upgrade the release
helm upgrade my-api7ee api7ee/api7ee --namespace api7ee
helm upgrade my-api7ee api7ee/api7ee-demo-k8s --namespace api7ee
# Uninstall
helm uninstall my-api7ee --namespace api7ee

View File

@@ -1,5 +1,5 @@
apiVersion: v2
name: api7ee
name: api7ee-demo-k8s
description: A Helm chart for API7 Enterprise Edition demo application
type: application
version: 0.1.0

View File

@@ -22,13 +22,13 @@ helm repo update
```bash
# Install with default values
helm install my-api7ee ./helm/api7ee
helm install my-api7ee ./helm/api7ee-demo-k8s-demo-k8s
# Install in a specific namespace
helm install my-api7ee ./helm/api7ee --namespace api7ee --create-namespace
helm install my-api7ee ./helm/api7ee-demo-k8s-demo-k8s --namespace api7ee --create-namespace
# Install with custom values file
helm install my-api7ee ./helm/api7ee -f custom-values.yaml
helm install my-api7ee ./helm/api7ee-demo-k8s-demo-k8s -f custom-values.yaml
```
## Configuration
@@ -131,10 +131,10 @@ api:
```bash
# Upgrade to a new version
helm upgrade my-api7ee ./helm/api7ee
helm upgrade my-api7ee ./helm/api7ee-demo-k8s-demo-k8s
# Upgrade with new values
helm upgrade my-api7ee ./helm/api7ee --set web.replicaCount=3
helm upgrade my-api7ee ./helm/api7ee-demo-k8s-demo-k8s --set web.replicaCount=3
```
## Uninstallation