This is an automated email from the ASF dual-hosted git repository.

tobous pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/db-jdo-site.git

commit 383fdc8457aae67b028a22782755180ff8d21d1e
Author: Tobias Bouschen <tobias.bousc...@googlemail.com>
AuthorDate: Fri Jan 22 23:03:59 2021 +0100

    Adjust site build workflow to preserve build artifact history
    
    Adjusts the workflow building and publishing the website to the site
    branch to preserve the history of the site branch.
    
    This was done to avoid issues with the Apache backend caused by
    force-pushing the new build results to an orphan branch every time.
    
    This new behavior is a bit more brittle than the old one as it relies on
    the current state of the site branch. The action will fails if the site
    branch is not already present. Additionally, it might also fail if the
    branch is in an unexpected state. But, as the action removes all
    existing resources, this should be unlikely.
    
    To resolve any issues caused by a missing or corrupted site branch, a
    future commit will introduce a recovery workflow that can be used to
    manually return the site branch to a usable base state.
---
 .github/workflows/deploy-site.yml | 71 +++++++++++++++++++++++++++++++--------
 1 file changed, 57 insertions(+), 14 deletions(-)

diff --git a/.github/workflows/deploy-site.yml 
b/.github/workflows/deploy-site.yml
index 4a1056a..eb6c817 100644
--- a/.github/workflows/deploy-site.yml
+++ b/.github/workflows/deploy-site.yml
@@ -1,4 +1,8 @@
 # Builds and deploys the site if the build was successful
+#
+# This job builds the website and deploys the build artifacts to the 'content' 
directory
+# Any additional files that are not part of the site build but should be 
published (e.g. website configuration files) must be handled explicitly
+# See step "Move additional resources to build directory" and sub-steps 
"Dropping old site resources" and "Adding new site configuration" of the 
'publish' step
 name: Build & Deploy Site
 
 # Conditions necessary to trigger a build
@@ -17,6 +21,8 @@ on:
       - 'src/main/asciidoc/**'
       - 'src/main/template/**'
       - '.asf.yaml.publish'
+      - '.htaccess'
+
 
 jobs:
   build:
@@ -28,9 +34,11 @@ jobs:
         with:
           fetch-depth: 1
 
+
       - name: Build Site
         run: mvn clean compile
 
+
       # Determines the short sha of the commit that triggered the build
       - name: Determine Short SHA
         if: success()
@@ -40,6 +48,7 @@ jobs:
           echo "::set-output name=short_sha::$short_sha"
         shell: 'bash'
 
+
       # Determines the author data of the HEAD commit
       # Sets up the author data to be used for the site deploy commit
       - name: Determine HEAD Commit Author Data
@@ -55,28 +64,62 @@ jobs:
           git config user.email $author_email
         shell: 'bash'
 
-      # Publishes the site build results to a separate orphan branch
+
+      # Adds additional configuration files that are supposed to be included 
in the page deploy to the build directory
+      #
+      # This ensures that such files are preserved when checking out the 
publish branch
+      - name: Add additional resources to build directory
+        if: success()
+        run: |
+          cp -v .asf.yaml.publish target/site/.asf.yaml
+          cp -v .htaccess target/site/
+
+
+      # Publishes the site build results to a separate branch
       #
-      # Creates and checks out a new orphan branch
-      # Creates a single commit containing only the site build artifacts and 
site configuration files located in the root directory
+      # Checks out the site branch
+      # Replaces the site configuration files and site build artifact with the 
ones set up in the previous step
+      # Creates a new commit containing the new site build artifacts and site 
configuration files
       # The commit is created with the author data set up in the previous step
-      # Force-pushes the created branch, overwriting the previously published 
site build
+      # Pushes the site branch
       - name: Publish site branch
         if: success()
         run: |
           branch_name="publish"
 
-          echo "Creating orphan branch"
-          git checkout --orphan $branch_name
+          echo "Checking out site branch"
+          git fetch origin $branch_name
+          git checkout -b $branch_name origin/$branch_name
+          echo
+
+          # Drops all existing files and folders except the base folder and 
the resources excluded by the regex
+          # This ensures that old configuration files that were removed on the 
master will be removed from the site branch as well
+          # Additional resources to exclude can be added by modifying the 
regex or adding new regex by using "-a -not -regex '...'"
+          echo "Dropping old site resources"
+          find . \
+            -mindepth 1 -regextype posix-extended \
+            -not -regex '^\./(target|.git)(/.*)?$' \
+            -delete -print
+          echo
+
+          echo "Adding new site configuration"
+          mv -v target/site/.asf.yaml ./
+          mv -v target/site/.htaccess ./
+          echo
+
+          echo "Adding new site build"
+          mkdir -v content
+          mv -v target/site/* content/
+          echo
+
+          # Explicitly removes build dir
+          # This checks whether there are any remaining resources that were 
not moved to the correct location
+          echo "Removing build dir"
+          rmdir -v -p target/site
           echo
 
-          echo "Dropping content other than site data"
-          git reset
-          rm .gitignore
-          git add .asf.yaml.publish target/site
-          git clean -df
-          git mv target/site/* ./
-          git mv .asf.yaml.publish .asf.yaml
+          echo "Staging new content"
+          git add .
           echo
 
           echo "Committing changes"
@@ -84,5 +127,5 @@ jobs:
           echo
 
           echo "Pushing site branch"
-          git push -f origin $branch_name
+          git push origin $branch_name
         shell: 'bash'

Reply via email to