From 0d6645430b2ee595747356fc92a71f0bf665e22f Mon Sep 17 00:00:00 2001 From: pieter Date: Thu, 27 Nov 2025 10:54:07 +0000 Subject: [PATCH] =?UTF-8?q?.gitea/workflows/update-images.yaml=20=E3=82=92?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/update-images.yaml | 221 ++++++++++++++++++++++++---- 1 file changed, 194 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/update-images.yaml b/.gitea/workflows/update-images.yaml index 731b553..e2c80e1 100644 --- a/.gitea/workflows/update-images.yaml +++ b/.gitea/workflows/update-images.yaml @@ -1,4 +1,4 @@ -name: Update Docker Image Tags +name: Update Docker Image Tags and Release Helm Chart on: schedule: @@ -6,11 +6,18 @@ on: workflow_dispatch: jobs: - update-tags: + update-and-release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install Helm + uses: azure/setup-helm@v3 + with: + version: 'v3.12.0' - name: Check for new nginx version id: nginx @@ -20,40 +27,200 @@ jobs: jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+-alpine-perl$' | sort -V | tail -1) echo "current=$CURRENT" >> $GITHUB_OUTPUT echo "latest=$LATEST" >> $GITHUB_OUTPUT + echo "Nginx: $CURRENT -> $LATEST" - - name: Check for new wordpress version + - name: Check for new WordPress version id: wordpress run: | CURRENT=$(grep -A2 "wordpress:" values.yaml | grep "tag:" | sed 's/.*tag: "\(.*\)"/\1/') LATEST=$(curl -s https://registry.hub.docker.com/v2/repositories/library/wordpress/tags?page_size=100 | \ jq -r '.results[].name' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+-php[0-9]+\.[0-9]+-fpm-alpine$' | sort -V | tail -1) + + # WordPressバージョンを抽出(例: 6.8.3-php8.4-fpm-alpine -> 6.8.3) + WP_VERSION=$(echo "$LATEST" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+') + echo "current=$CURRENT" >> $GITHUB_OUTPUT echo "latest=$LATEST" >> $GITHUB_OUTPUT + echo "wp_version=$WP_VERSION" >> $GITHUB_OUTPUT + echo "WordPress: $CURRENT -> $LATEST (version: $WP_VERSION)" + + - name: Determine if update is needed + id: check_update + run: | + if [ "${{ steps.nginx.outputs.current }}" != "${{ steps.nginx.outputs.latest }}" ] || \ + [ "${{ steps.wordpress.outputs.current }}" != "${{ steps.wordpress.outputs.latest }}" ]; then + echo "update_needed=true" >> $GITHUB_OUTPUT + echo "Update is needed" + else + echo "update_needed=false" >> $GITHUB_OUTPUT + echo "Already up to date" + fi - name: Update values.yaml - if: steps.nginx.outputs.current != steps.nginx.outputs.latest || steps.wordpress.outputs.current != steps.wordpress.outputs.latest + if: steps.check_update.outputs.update_needed == 'true' run: | - sed -i 's/tag: "${{ steps.nginx.outputs.current }}"/tag: "${{ steps.nginx.outputs.latest }}"/' values.yaml - sed -i 's/tag: "${{ steps.wordpress.outputs.current }}"/tag: "${{ steps.wordpress.outputs.latest }}"/' values.yaml + # Nginxタグ更新 + sed -i 's|tag: "${{ steps.nginx.outputs.current }}"|tag: "${{ steps.nginx.outputs.latest }}"|' values.yaml + + # WordPressタグ更新 + sed -i 's|tag: "${{ steps.wordpress.outputs.current }}"|tag: "${{ steps.wordpress.outputs.latest }}"|' values.yaml + + echo "values.yaml updated" - - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: | - chore: update docker image tags - - - nginx: ${{ steps.nginx.outputs.current }} → ${{ steps.nginx.outputs.latest }} - - wordpress: ${{ steps.wordpress.outputs.current }} → ${{ steps.wordpress.outputs.latest }} - title: 'chore: update docker image tags' - body: | - ## Docker Image Updates - - | Image | Current | Latest | - |-------|---------|--------| - | nginx | `${{ steps.nginx.outputs.current }}` | `${{ steps.nginx.outputs.latest }}` | - | wordpress | `${{ steps.wordpress.outputs.current }}` | `${{ steps.wordpress.outputs.latest }}` | - - This PR was automatically generated. - branch: update-docker-images - delete-branch: true \ No newline at end of file + - name: Update Chart.yaml version + if: steps.check_update.outputs.update_needed == 'true' + run: | + WP_VERSION="${{ steps.wordpress.outputs.wp_version }}" + + # Chart.yamlのversionとappVersionを更新 + sed -i "s/^version: .*/version: $WP_VERSION/" Chart.yaml + sed -i "s/^appVersion: .*/appVersion: \"$WP_VERSION\"/" Chart.yaml + + echo "Chart.yaml updated to version $WP_VERSION" + cat Chart.yaml + + - name: Commit changes + if: steps.check_update.outputs.update_needed == 'true' + run: | + git config user.name "GitHub Actions Bot" + git config user.email "actions@github.com" + + git add values.yaml Chart.yaml + git commit -m "chore: update to WordPress ${{ steps.wordpress.outputs.wp_version }} + +- nginx: ${{ steps.nginx.outputs.current }} → ${{ steps.nginx.outputs.latest }} +- wordpress: ${{ steps.wordpress.outputs.current }} → ${{ steps.wordpress.outputs.latest }} +- chart version: ${{ steps.wordpress.outputs.wp_version }}" + + git push origin main + + - name: Package Helm Chart + if: steps.check_update.outputs.update_needed == 'true' + run: | + helm package . + echo "Helm chart packaged" + + - name: Create Git Tag + if: steps.check_update.outputs.update_needed == 'true' + run: | + WP_VERSION="${{ steps.wordpress.outputs.wp_version }}" + git tag -a "v$WP_VERSION" -m "Release WordPress $WP_VERSION" + git push origin "v$WP_VERSION" + echo "Git tag v$WP_VERSION created" + + - name: Create Gitea Release + if: steps.check_update.outputs.update_needed == 'true' + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + run: | + WP_VERSION="${{ steps.wordpress.outputs.wp_version }}" + CHART_NAME=$(grep '^name:' Chart.yaml | awk '{print $2}') + PACKAGE_FILE="${CHART_NAME}-${WP_VERSION}.tgz" + + # リリースノートの生成 + RELEASE_NOTES="## WordPress Helm Chart v${WP_VERSION} + +### Updated Components + +| Component | Previous | Current | +|-----------|----------|---------| +| Nginx | \`${{ steps.nginx.outputs.current }}\` | \`${{ steps.nginx.outputs.latest }}\` | +| WordPress | \`${{ steps.wordpress.outputs.current }}\` | \`${{ steps.wordpress.outputs.latest }}\` | + +### Installation + +\`\`\`bash +helm repo add myrepo https://gitea.example.com/user/repo/raw/branch/gh-pages +helm repo update +helm install wordpress myrepo/${CHART_NAME} --version ${WP_VERSION} +\`\`\` + +### Upgrade + +\`\`\`bash +helm upgrade wordpress myrepo/${CHART_NAME} --version ${WP_VERSION} +\`\`\` + +--- +*This release was automatically generated*" + + # Gitea APIでリリース作成 + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{ + \"tag_name\": \"v${WP_VERSION}\", + \"name\": \"WordPress Helm Chart v${WP_VERSION}\", + \"body\": $(echo "$RELEASE_NOTES" | jq -Rs .), + \"draft\": false, + \"prerelease\": false + }" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" + + # リリースIDを取得 + RELEASE_ID=$(curl -s \ + -H "Authorization: token ${GITEA_TOKEN}" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/v${WP_VERSION}" | \ + jq -r '.id') + + # Helmパッケージをリリースにアタッチ + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/gzip" \ + --data-binary @"${PACKAGE_FILE}" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${PACKAGE_FILE}" + + echo "Gitea release v${WP_VERSION} created with chart package" + + - name: Update Helm Repository Index + if: steps.check_update.outputs.update_needed == 'true' + run: | + WP_VERSION="${{ steps.wordpress.outputs.wp_version }}" + CHART_NAME=$(grep '^name:' Chart.yaml | awk '{print $2}') + PACKAGE_FILE="${CHART_NAME}-${WP_VERSION}.tgz" + + # gh-pagesブランチをチェックアウト + git fetch origin gh-pages || git checkout --orphan gh-pages + git checkout gh-pages || (git checkout --orphan gh-pages && git rm -rf .) + + # 新しいパッケージを追加 + mv "${PACKAGE_FILE}" . + + # index.yamlを生成/更新 + helm repo index . --url https://gitea.example.com/${GITHUB_REPOSITORY}/raw/branch/gh-pages + + # コミットしてプッシュ + git config user.name "GitHub Actions Bot" + git config user.email "actions@github.com" + git add "${PACKAGE_FILE}" index.yaml + git commit -m "chore: add ${CHART_NAME} v${WP_VERSION} to Helm repository" + git push origin gh-pages + + echo "Helm repository index updated" + + - name: Summary + if: steps.check_update.outputs.update_needed == 'true' + run: | + WP_VERSION="${{ steps.wordpress.outputs.wp_version }}" + echo "## ✅ Update Completed" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Updated Images" >> $GITHUB_STEP_SUMMARY + echo "- **Nginx**: \`${{ steps.nginx.outputs.current }}\` → \`${{ steps.nginx.outputs.latest }}\`" >> $GITHUB_STEP_SUMMARY + echo "- **WordPress**: \`${{ steps.wordpress.outputs.current }}\` → \`${{ steps.wordpress.outputs.latest }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Chart Version" >> $GITHUB_STEP_SUMMARY + echo "- **Version**: \`${WP_VERSION}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "### Actions Taken" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Updated values.yaml" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Updated Chart.yaml" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Created Git tag v${WP_VERSION}" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Created Gitea release" >> $GITHUB_STEP_SUMMARY + echo "- ✅ Updated Helm repository" >> $GITHUB_STEP_SUMMARY + + - name: No Update Needed + if: steps.check_update.outputs.update_needed == 'false' + run: | + echo "## ℹ️ No Update Needed" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "All images are already up to date." >> $GITHUB_STEP_SUMMARY \ No newline at end of file