diff --git a/.asf.yaml b/.asf.yaml index 1a67821d2..2431cabd7 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -40,6 +40,7 @@ github: rebase: true protected_branches: asf-site: {} + asf-staging: {} main: required_status_checks: # strict means "Require branches to be up to date before merging". diff --git a/.github/workflows/publish-cloudberry-site.yml b/.github/workflows/publish-cloudberry-site.yml index 95bf8cbcc..ec7bb6870 100644 --- a/.github/workflows/publish-cloudberry-site.yml +++ b/.github/workflows/publish-cloudberry-site.yml @@ -1,46 +1,10 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# publish-cloudberry-site.yml -# -# This workflow builds and publishes the Apache Cloudberry website to -# cloudberry.apache.org. -# The site is built using Node.js and published to the asf-site branch, -# which Apache infrastructure then serves at cloudberry.apache.org -# -# Triggered by: -# - Push to main branch: Builds and publishes to asf-site -# - Pull requests: Builds only (no publish) to verify changes -# -# Requirements: -# - Node.js project with build script in package.json -# - .asf.yaml file in repository root -# -# Notes: -# - Publication only occurs on push events, not pull requests -# - The asf-site branch is protected - only this workflow should modify it -# - Build artifacts are placed in ./build directory - name: Publish Cloudberry Site on: push: branches: [ main ] pull_request: + workflow_dispatch: jobs: publish: @@ -48,15 +12,37 @@ jobs: permissions: contents: write steps: + # Checkout the repository - uses: actions/checkout@v4 + + # Set up Node.js environment - uses: actions/setup-node@v4 with: node-version: 20 - - run: npm install - - run: npm run build - - run: cp .asf.yaml build/.asf.yaml - - uses: peaceiris/actions-gh-pages@v3 - if: github.event_name != 'pull_request' + + # Install dependencies and build site + - name: Install dependencies + run: npm install + + - name: Build site + run: npm run build + + - name: Copy ASF config + run: cp .asf.yaml build/.asf.yaml + + # Deploy to asf-staging for PR preview + - name: Deploy to staging + if: github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./build + publish_branch: asf-staging + + # Deploy to asf-site for production + - name: Deploy to production + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./build