503 lines
21 KiB
YAML
503 lines
21 KiB
YAML
name: InfluxDB 3 Release Documentation
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
product:
|
||
description: 'Product being released'
|
||
required: true
|
||
type: choice
|
||
options:
|
||
- core
|
||
- enterprise
|
||
- clustered
|
||
- cloud-dedicated
|
||
- cloud-serverless
|
||
version:
|
||
description: 'Release tag name (must exist in git tags, e.g., v3.0.0 or "local" for dev)'
|
||
required: true
|
||
type: string
|
||
previous_version:
|
||
description: 'Previous release tag name (must exist in git tags, e.g., v2.9.0)'
|
||
required: true
|
||
type: string
|
||
dry_run:
|
||
description: 'Dry run (do not create PRs or issues)'
|
||
required: false
|
||
type: boolean
|
||
default: true
|
||
|
||
jobs:
|
||
generate-release-notes-core-enterprise:
|
||
name: Generate Release Notes (Core/Enterprise)
|
||
runs-on: ubuntu-latest
|
||
if: contains(fromJSON('["core", "enterprise"]'), github.event.inputs.product)
|
||
outputs:
|
||
generated: ${{ steps.generate.outputs.generated }}
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Set up Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'yarn'
|
||
|
||
- name: Install dependencies
|
||
run: yarn install --frozen-lockfile
|
||
|
||
- name: Generate release notes
|
||
id: generate
|
||
run: |
|
||
echo "Generating Core/Enterprise release notes for ${{ github.event.inputs.product }} v${{ github.event.inputs.version }}"
|
||
|
||
# Create output directory
|
||
mkdir -p helper-scripts/output/release-notes
|
||
|
||
# Note: This generates placeholder release notes since the actual repositories
|
||
# (influxdb and influxdb_pro) are not available in the GitHub Actions environment.
|
||
# To generate actual release notes, the script would need to be run locally with:
|
||
# node ./helper-scripts/common/generate-release-notes.js \
|
||
# --config ./helper-scripts/common/config/influxdb3-core-enterprise.json \
|
||
# ${{ github.event.inputs.previous_version }} \
|
||
# ${{ github.event.inputs.version }}
|
||
|
||
# Create structured placeholder that matches the expected format
|
||
cat > helper-scripts/output/release-notes/release-notes-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}.md << EOF
|
||
> [!Note]
|
||
> #### InfluxDB 3 Core and Enterprise relationship
|
||
>
|
||
> InfluxDB 3 Enterprise is a superset of InfluxDB 3 Core.
|
||
> All updates to Core are automatically included in Enterprise.
|
||
> The Enterprise sections below only list updates exclusive to Enterprise.
|
||
|
||
## ${{ github.event.inputs.version }} {date="$(date +'%Y-%m-%d')"}
|
||
|
||
### Core
|
||
|
||
#### Features
|
||
|
||
- TODO: Add Core features for ${{ github.event.inputs.product }} ${{ github.event.inputs.version }}
|
||
|
||
#### Bug Fixes
|
||
|
||
- TODO: Add Core bug fixes for ${{ github.event.inputs.product }} ${{ github.event.inputs.version }}
|
||
|
||
### Enterprise
|
||
|
||
All Core updates are included in Enterprise. Additional Enterprise-specific features and fixes:
|
||
|
||
#### Features
|
||
|
||
- TODO: Add Enterprise-specific features for ${{ github.event.inputs.version }}
|
||
|
||
#### Bug Fixes
|
||
|
||
- TODO: Add Enterprise-specific bug fixes for ${{ github.event.inputs.version }}
|
||
EOF
|
||
|
||
echo "generated=true" >> $GITHUB_OUTPUT
|
||
|
||
- name: Upload release notes
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: release-notes-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}
|
||
path: helper-scripts/output/release-notes/
|
||
retention-days: 30
|
||
|
||
# generate-release-notes-distributed:
|
||
# name: Generate Release Notes (Distributed)
|
||
# runs-on: ubuntu-latest
|
||
# if: contains(fromJSON('["clustered", "cloud-dedicated", "cloud-serverless"]'), github.event.inputs.product)
|
||
# outputs:
|
||
# generated: ${{ steps.generate.outputs.generated }}
|
||
|
||
# steps:
|
||
# - uses: actions/checkout@v4
|
||
|
||
# - name: Set up Node.js
|
||
# uses: actions/setup-node@v4
|
||
# with:
|
||
# node-version: '18'
|
||
# cache: 'yarn'
|
||
|
||
# - name: Install dependencies
|
||
# run: yarn install --frozen-lockfile
|
||
|
||
# - name: Generate release notes
|
||
# id: generate
|
||
# run: |
|
||
# echo "Generating distributed product release notes for ${{ github.event.inputs.product }} v${{ github.event.inputs.version }}"
|
||
|
||
# # Create output directory
|
||
# mkdir -p helper-scripts/output/release-notes
|
||
|
||
# # Note: This generates placeholder release notes since the actual repositories
|
||
# # for distributed products are not available in the GitHub Actions environment.
|
||
# # To generate actual release notes, the script would need to be run locally with:
|
||
# # node ./helper-scripts/common/generate-release-notes.js \
|
||
# # --config ./helper-scripts/common/config/influxdb3-clustered.json \
|
||
# # ${{ github.event.inputs.previous_version }} \
|
||
# # ${{ github.event.inputs.version }}
|
||
|
||
# # Create structured placeholder for distributed products
|
||
# cat > helper-scripts/output/release-notes/release-notes-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}.md << EOF
|
||
# ## ${{ github.event.inputs.version }} {date="$(date +'%Y-%m-%d')"}
|
||
|
||
# ### Features
|
||
|
||
# - TODO: Add features for ${{ github.event.inputs.product }} ${{ github.event.inputs.version }}
|
||
|
||
# ### Bug Fixes
|
||
|
||
# - TODO: Add bug fixes for ${{ github.event.inputs.product }} ${{ github.event.inputs.version }}
|
||
|
||
# ### Performance Improvements
|
||
|
||
# - TODO: Add performance improvements for ${{ github.event.inputs.product }} ${{ github.event.inputs.version }}
|
||
# EOF
|
||
|
||
# echo "generated=true" >> $GITHUB_OUTPUT
|
||
|
||
# - name: Upload release notes
|
||
# uses: actions/upload-artifact@v4
|
||
# with:
|
||
# name: release-notes-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}
|
||
# path: helper-scripts/output/release-notes/
|
||
# retention-days: 30
|
||
|
||
audit-cli-documentation:
|
||
name: Audit CLI Documentation
|
||
needs: generate-release-notes-core-enterprise
|
||
runs-on: ubuntu-latest
|
||
if: needs.generate-release-notes-core-enterprise.outputs.generated == 'true' && contains(fromJSON('["core", "enterprise"]'), github.event.inputs.product)
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Set up Node.js
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '18'
|
||
cache: 'yarn'
|
||
|
||
- name: Install dependencies
|
||
run: yarn install --frozen-lockfile
|
||
|
||
- name: Pull Docker images for version
|
||
run: |
|
||
VERSION="${{ github.event.inputs.version }}"
|
||
PRODUCT="${{ github.event.inputs.product }}"
|
||
|
||
if [ "$PRODUCT" == "both" ]; then
|
||
docker pull influxdb:${VERSION}-core || true
|
||
docker pull influxdb:${VERSION}-enterprise || true
|
||
else
|
||
docker pull influxdb:${VERSION}-${PRODUCT} || true
|
||
fi
|
||
|
||
- name: Run CLI audit
|
||
run: |
|
||
PRODUCT="${{ github.event.inputs.product }}"
|
||
VERSION="${{ github.event.inputs.version }}"
|
||
|
||
node ./helper-scripts/influxdb3-monolith/audit-cli-documentation.js $PRODUCT $VERSION
|
||
|
||
- name: Upload CLI audit reports
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: cli-audit-release-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}
|
||
path: helper-scripts/output/cli-audit/
|
||
retention-days: 90
|
||
|
||
# audit-distributed-documentation:
|
||
# name: Audit Distributed Products Documentation
|
||
# needs: generate-release-notes-distributed
|
||
# runs-on: ubuntu-latest
|
||
# if: needs.generate-release-notes-distributed.outputs.generated == 'true' && contains(fromJSON('["clustered", "cloud-dedicated", "cloud-serverless"]'), github.event.inputs.product)
|
||
|
||
# steps:
|
||
# - uses: actions/checkout@v4
|
||
|
||
# - name: Set up Node.js
|
||
# uses: actions/setup-node@v4
|
||
# with:
|
||
# node-version: '18'
|
||
# cache: 'yarn'
|
||
|
||
# - name: Install dependencies
|
||
# run: yarn install --frozen-lockfile
|
||
|
||
# - name: Run distributed products audit
|
||
# run: |
|
||
# PRODUCT="${{ github.event.inputs.product }}"
|
||
# VERSION="${{ github.event.inputs.version }}"
|
||
|
||
# echo "Auditing distributed product: $PRODUCT v$VERSION"
|
||
# # TODO: Implement distributed products audit for release
|
||
# # This would audit API docs, deployment guides, configuration references
|
||
# # node ./helper-scripts/influxdb3-distributed/audit-documentation.js $PRODUCT $VERSION
|
||
|
||
# # For now, create placeholder report
|
||
# mkdir -p helper-scripts/output/distributed-audit
|
||
# cat > helper-scripts/output/distributed-audit/release-audit-$PRODUCT-$VERSION.md << 'EOF'
|
||
# # Release Audit Report - Distributed Products
|
||
|
||
# **Product:** $PRODUCT
|
||
# **Version:** $VERSION
|
||
# **Date:** $(date)
|
||
# **Status:** Placeholder - audit not yet implemented
|
||
|
||
# ## Areas to Audit
|
||
# - API documentation completeness
|
||
# - Deployment guide accuracy
|
||
# - Configuration reference updates
|
||
# - Integration guide updates
|
||
# - Version-specific feature documentation
|
||
|
||
# ## TODO
|
||
# - Implement API documentation audit
|
||
# - Implement deployment guide audit
|
||
# - Implement configuration reference audit
|
||
# - Implement integration guide audit
|
||
# EOF
|
||
|
||
# - name: Upload distributed audit reports
|
||
# uses: actions/upload-artifact@v4
|
||
# with:
|
||
# name: distributed-audit-release-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}
|
||
# path: helper-scripts/output/distributed-audit/
|
||
# retention-days: 90
|
||
|
||
create-documentation-pr:
|
||
name: Create Documentation PR
|
||
needs: [generate-release-notes-core-enterprise, audit-cli-documentation]
|
||
runs-on: ubuntu-latest
|
||
if: github.event.inputs.dry_run != 'true' && always() && (needs.generate-release-notes-core-enterprise.result == 'success')
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Download artifacts
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
path: artifacts/
|
||
|
||
- name: Create release branch
|
||
run: |
|
||
BRANCH="release-docs-${{ github.event.inputs.product }}-${{ github.event.inputs.version }}"
|
||
git checkout -b $BRANCH
|
||
echo "BRANCH=$BRANCH" >> $GITHUB_ENV
|
||
|
||
- name: Copy release notes to docs
|
||
run: |
|
||
# Download the generated release notes artifact
|
||
PRODUCT="${{ github.event.inputs.product }}"
|
||
VERSION="${{ github.event.inputs.version }}"
|
||
|
||
# Determine the target documentation file based on product
|
||
case "$PRODUCT" in
|
||
"core"|"enterprise")
|
||
TARGET_FILE="content/shared/v3-core-enterprise-release-notes/_index.md"
|
||
SOURCE_FILE="artifacts/release-notes-${PRODUCT}-${VERSION}/release-notes-${PRODUCT}-${VERSION}.md"
|
||
;;
|
||
"clustered")
|
||
TARGET_FILE="content/influxdb3/clustered/reference/release-notes/_index.md"
|
||
SOURCE_FILE="artifacts/release-notes-${PRODUCT}-${VERSION}/release-notes-${PRODUCT}-${VERSION}.md"
|
||
;;
|
||
"cloud-dedicated")
|
||
TARGET_FILE="content/influxdb3/cloud-dedicated/reference/release-notes/_index.md"
|
||
SOURCE_FILE="artifacts/release-notes-${PRODUCT}-${VERSION}/release-notes-${PRODUCT}-${VERSION}.md"
|
||
;;
|
||
"cloud-serverless")
|
||
TARGET_FILE="content/influxdb3/cloud-serverless/reference/release-notes/_index.md"
|
||
SOURCE_FILE="artifacts/release-notes-${PRODUCT}-${VERSION}/release-notes-${PRODUCT}-${VERSION}.md"
|
||
;;
|
||
*)
|
||
echo "Unknown product: $PRODUCT"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
# Check if source file exists
|
||
if [ -f "$SOURCE_FILE" ]; then
|
||
echo "Copying release notes from $SOURCE_FILE to $TARGET_FILE"
|
||
|
||
# For Core/Enterprise, prepend to existing file (new releases go at the top)
|
||
if [ "$PRODUCT" = "core" ] || [ "$PRODUCT" = "enterprise" ]; then
|
||
# Create temporary file with new content + existing content
|
||
cp "$SOURCE_FILE" temp_release_notes.md
|
||
echo "" >> temp_release_notes.md
|
||
cat "$TARGET_FILE" >> temp_release_notes.md
|
||
mv temp_release_notes.md "$TARGET_FILE"
|
||
else
|
||
# For other products, replace the file
|
||
cp "$SOURCE_FILE" "$TARGET_FILE"
|
||
fi
|
||
|
||
echo "Release notes successfully copied to documentation"
|
||
else
|
||
echo "Warning: Release notes file not found at $SOURCE_FILE"
|
||
echo "Available files in artifacts:"
|
||
find artifacts/ -type f -name "*.md" || echo "No markdown files found"
|
||
fi
|
||
|
||
- name: Create Pull Request
|
||
uses: peter-evans/create-pull-request@v5
|
||
with:
|
||
token: ${{ secrets.GITHUB_TOKEN }}
|
||
branch: ${{ env.BRANCH }}
|
||
title: "docs: Release documentation for ${{ github.event.inputs.product }} v${{ github.event.inputs.version }}"
|
||
body: |
|
||
## Release Documentation Update
|
||
|
||
This PR contains documentation updates for **${{ github.event.inputs.product }} v${{ github.event.inputs.version }}**
|
||
|
||
### Included Updates:
|
||
- [ ] Release notes
|
||
- [ ] Version updates
|
||
- [ ] CLI documentation audit results
|
||
|
||
### Artifacts:
|
||
- [Release Notes](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||
- [CLI Audit Report](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||
|
||
### Manual Review Needed:
|
||
Please review the CLI audit report for any missing or outdated documentation that needs to be updated.
|
||
|
||
---
|
||
*This PR was automatically generated by the release workflow.*
|
||
labels: |
|
||
documentation
|
||
release
|
||
${{ github.event.inputs.product }}
|
||
draft: true
|
||
|
||
create-audit-issue:
|
||
name: Create Audit Issue
|
||
needs: [audit-cli-documentation]
|
||
runs-on: ubuntu-latest
|
||
if: github.event.inputs.dry_run != 'true' && always() && (needs.audit-cli-documentation.result == 'success')
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Download audit reports
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
path: audit-reports/
|
||
|
||
- name: Create issue from audit
|
||
uses: actions/github-script@v7
|
||
with:
|
||
script: |
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
const product = '${{ github.event.inputs.product }}';
|
||
const version = '${{ github.event.inputs.version }}';
|
||
|
||
let auditReports = [];
|
||
let hasIssues = false;
|
||
|
||
// Check for CLI audit report
|
||
const cliAuditPath = `audit-reports/cli-audit-release-${product}-${version}`;
|
||
if (fs.existsSync(cliAuditPath)) {
|
||
const files = fs.readdirSync(cliAuditPath);
|
||
const cliAuditFile = files.find(f => f.includes('documentation-audit'));
|
||
if (cliAuditFile) {
|
||
const report = fs.readFileSync(path.join(cliAuditPath, cliAuditFile), 'utf8');
|
||
const hasMissingOptions = report.includes('⚠️ Missing from docs');
|
||
const hasExtraOptions = report.includes('ℹ️ Documented but not in CLI');
|
||
if (hasMissingOptions || hasExtraOptions) {
|
||
auditReports.push({
|
||
type: 'CLI',
|
||
content: report
|
||
});
|
||
hasIssues = true;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check for distributed audit report
|
||
const distributedAuditPath = `audit-reports/distributed-audit-release-${product}-${version}`;
|
||
if (fs.existsSync(distributedAuditPath)) {
|
||
const files = fs.readdirSync(distributedAuditPath);
|
||
const distributedAuditFile = files.find(f => f.includes('release-audit'));
|
||
if (distributedAuditFile) {
|
||
const report = fs.readFileSync(path.join(distributedAuditPath, distributedAuditFile), 'utf8');
|
||
// For now, always include distributed audit reports since they're placeholders
|
||
auditReports.push({
|
||
type: 'Distributed Products',
|
||
content: report
|
||
});
|
||
hasIssues = true;
|
||
}
|
||
}
|
||
|
||
if (hasIssues && auditReports.length > 0) {
|
||
// Create comprehensive issue
|
||
const issueBody = [
|
||
'## Release Documentation Audit Results',
|
||
'',
|
||
`The following documentation issues were found during the release of **${product} v${version}**:`,
|
||
'',
|
||
...auditReports.map(report => [
|
||
`### ${report.type} Audit`,
|
||
'',
|
||
report.content,
|
||
''
|
||
]).flat(),
|
||
'### Action Items:',
|
||
'- [ ] Review and update documentation for missing or outdated content',
|
||
'- [ ] Verify all examples work with the new version',
|
||
'- [ ] Update any version-specific content',
|
||
'- [ ] Remove documentation for deprecated features',
|
||
'',
|
||
'---',
|
||
'*This issue was automatically generated during the release process.*'
|
||
].join('\n');
|
||
|
||
await github.rest.issues.create({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
title: `Documentation Updates Needed - ${product} v${version}`,
|
||
body: issueBody,
|
||
labels: ['documentation', 'release', product, 'audit']
|
||
});
|
||
|
||
console.log('Created issue for documentation updates');
|
||
} else {
|
||
console.log('No documentation issues found - skipping issue creation');
|
||
}
|
||
|
||
influxdb3-monolith-release-summary:
|
||
name: Release Summary
|
||
needs: [generate-release-notes-core-enterprise, audit-cli-documentation, create-documentation-pr, create-audit-issue]
|
||
runs-on: ubuntu-latest
|
||
if: always()
|
||
|
||
steps:
|
||
- name: Generate summary
|
||
run: |
|
||
echo "# Release Documentation Summary" >> $GITHUB_STEP_SUMMARY
|
||
echo "" >> $GITHUB_STEP_SUMMARY
|
||
echo "## Release Information" >> $GITHUB_STEP_SUMMARY
|
||
echo "- **Product**: ${{ github.event.inputs.product }}" >> $GITHUB_STEP_SUMMARY
|
||
echo "- **Version**: ${{ github.event.inputs.version }}" >> $GITHUB_STEP_SUMMARY
|
||
echo "- **Previous Version**: ${{ github.event.inputs.previous_version }}" >> $GITHUB_STEP_SUMMARY
|
||
echo "- **Dry Run**: ${{ github.event.inputs.dry_run }}" >> $GITHUB_STEP_SUMMARY
|
||
echo "" >> $GITHUB_STEP_SUMMARY
|
||
|
||
echo "## Workflow Results" >> $GITHUB_STEP_SUMMARY
|
||
echo "| Step | Status |" >> $GITHUB_STEP_SUMMARY
|
||
echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
|
||
echo "| Generate Release Notes (Core/Enterprise) | ${{ needs.generate-release-notes-core-enterprise.result }} |" >> $GITHUB_STEP_SUMMARY
|
||
echo "| CLI Documentation Audit | ${{ needs.audit-cli-documentation.result }} |" >> $GITHUB_STEP_SUMMARY
|
||
echo "| Create Documentation PR | ${{ needs.create-documentation-pr.result }} |" >> $GITHUB_STEP_SUMMARY
|
||
echo "| Create Audit Issue | ${{ needs.create-audit-issue.result }} |" >> $GITHUB_STEP_SUMMARY
|
||
echo "" >> $GITHUB_STEP_SUMMARY
|
||
|
||
if [ "${{ github.event.inputs.dry_run }}" == "true" ]; then
|
||
echo "**Note**: This was a dry run. No PRs or issues were created." >> $GITHUB_STEP_SUMMARY
|
||
fi |