11#! /bin/bash
22set -eo pipefail
33
4- DRY_RUN=false
5- if [[ " $1 " == " --dry-run" ]]; then
6- DRY_RUN=true
7- echo " 🧪 DRY RUN MODE: Will simulate SVN operations without committing"
4+ if [[ -z " $SVN_USERNAME " ]]; then
5+ echo " Set the SVN_USERNAME secret"
6+ exit 1
87fi
98
10- if [[ " $DRY_RUN " == " false" ]]; then
11- if [[ -z " $SVN_USERNAME " ]]; then
12- echo " Set the SVN_USERNAME secret"
13- exit 1
14- fi
15-
16- if [[ -z " $SVN_PASSWORD " ]]; then
17- echo " Set the SVN_PASSWORD secret"
18- exit 1
19- fi
9+ if [[ -z " $SVN_PASSWORD " ]]; then
10+ echo " Set the SVN_PASSWORD secret"
11+ exit 1
2012fi
2113
2214if [[ -z " $THEME_VERSION " ]]; then
@@ -34,139 +26,57 @@ if [[ -z "$BUILD_DIR" ]]; then
3426 exit 1
3527fi
3628
29+ # Ensure SVN is installed
3730svn --version
3831
3932echo " SVN installed"
4033
4134echo " Publish theme version: ${THEME_VERSION} "
42- echo " Theme slug: ${THEME_SLUG} "
43- echo " Build directory: ${BUILD_DIR} "
4435
4536THEME_PATH=" $GITHUB_WORKSPACE "
4637SVN_PATH=" $GITHUB_WORKSPACE /svn"
47- SVN_URL=" https://themes.svn.wordpress.org/${THEME_SLUG} "
4838VERSION_DIR=" ${THEME_VERSION} "
4939
5040cd $THEME_PATH
5141pwd
5242mkdir -p $SVN_PATH
5343cd $SVN_PATH
5444
55- echo " Checkout SVN repository root"
56- if [[ " $DRY_RUN " == " true" ]]; then
57- echo " 🧪 DRY RUN: Checking out SVN repository (read-only)"
58- svn co --depth immediates " $SVN_URL " . 2>&1 | head -20 || {
59- echo " ⚠️ Could not checkout repository (may require auth for some operations)"
60- echo " This is normal - simulating checkout for dry-run"
61- mkdir -p " $VERSION_DIR "
62- cd " $VERSION_DIR "
63- }
64- else
65- svn co --depth immediates " $SVN_URL " .
66- fi
45+ echo " Checkout from SVN"
46+ svn co --depth immediates " https://themes.svn.wordpress.org/${THEME_SLUG} " .
6747
6848echo " Check if version folder already exists"
69- VERSION_EXISTS=false
70- if svn list " $SVN_URL /$VERSION_DIR " > /dev/null 2>&1 ; then
71- VERSION_EXISTS=true
72- fi
49+ if svn list " https://themes.svn.wordpress.org/${THEME_SLUG} /${VERSION_DIR} " > /dev/null 2>&1 ; then
50+ echo " ❌ ERROR: Version folder $VERSION_DIR already exists in SVN!
51+ SVN URL: https://themes.svn.wordpress.org/${THEME_SLUG} /${VERSION_DIR}
7352
74- if [[ " $VERSION_EXISTS " == " true" ]]; then
75- echo " ❌ ERROR: Version folder $VERSION_DIR already exists in SVN!"
76- echo " SVN URL: $SVN_URL /$VERSION_DIR "
77- echo " "
78- echo " WordPress.org theme versions are immutable - you cannot update an existing version."
79- echo " If you need to make changes, create a new version (e.g., increment patch/minor/major)."
80- echo " "
81- if [[ " $DRY_RUN " == " true" ]]; then
82- echo " 🧪 DRY RUN: Would fail here (version already exists)"
83- else
84- exit 1
85- fi
53+ WordPress.org theme versions are immutable - you cannot update an existing version.
54+ If you need to make changes, create a new version (e.g., increment patch/minor/major)."
55+ exit 1
8656fi
8757
88- echo " Version folder $VERSION_DIR does not exist - will create it"
8958mkdir -p " $VERSION_DIR "
9059cd " $VERSION_DIR "
91- if [[ " $DRY_RUN " == " false" ]]; then
92- cd ..
93- svn add " $VERSION_DIR "
94- cd " $VERSION_DIR "
95- fi
60+ cd ..
61+ svn add " $VERSION_DIR "
62+ cd " $VERSION_DIR "
9663
97- echo " Copy files from build directory"
98- if [[ " $BUILD_DIR " == /* ]]; then
99- BUILD_SOURCE=" $BUILD_DIR "
100- else
101- BUILD_SOURCE=" $THEME_PATH /$BUILD_DIR "
102- fi
64+ echo " Copy files"
65+ rsync -ah --progress " $THEME_PATH /$BUILD_DIR /" * . || rsync -ah --progress " $THEME_PATH /$BUILD_DIR /." . || true
10366
104- if [ ! -d " $BUILD_SOURCE " ]; then
105- echo " ❌ Build directory not found: $BUILD_SOURCE "
106- exit 1
107- fi
67+ echo " Preparing files"
68+ cd " $VERSION_DIR "
10869
109- rsync -ah --progress " $BUILD_SOURCE /" * . || rsync -ah --progress " $BUILD_SOURCE /." . || true
70+ echo " svn add"
71+ svn status | grep -v ' ^.[ \t]*\\..*' | { grep ' ^?' || true ; } | awk ' {print $2}' | xargs -r svn add || true
11072
111- echo " Preparing files for SVN"
11273svn status
11374
114- echo " svn add new files"
115- if [[ " $DRY_RUN " == " false" ]]; then
116- svn status | grep -v ' ^.[ \t]*\\..*' | { grep ' ^?' || true ; } | awk ' {print $2}' | xargs -r svn add || true
117- else
118- echo " 🧪 DRY RUN: Would add new files"
119- svn status 2> /dev/null | grep -v ' ^.[ \t]*\\..*' | { grep ' ^?' || true ; } | awk ' {print $2}' | sed ' s|^| Would add: |' || true
120- fi
75+ echo " Commit files to version folder $VERSION_DIR "
76+ svn ci -m " Upload v${THEME_VERSION} " --no-auth-cache --non-interactive --username " $SVN_USERNAME " --password " $SVN_PASSWORD "
12177
122- echo " "
123- echo " 📊 **SVN Status Summary (what will be committed):**"
124- echo " =========================================="
125- SVN_STATUS=$( svn status 2> /dev/null || echo " " )
126- TOTAL_CHANGES=0
127- if [ -n " $SVN_STATUS " ]; then
128- echo " $SVN_STATUS "
129- echo " "
130- echo " Summary:"
131- ADDED_COUNT=$( echo " $SVN_STATUS " | grep -c " ^A" || echo " 0" )
132- MODIFIED_COUNT=$( echo " $SVN_STATUS " | grep -c " ^M" || echo " 0" )
133- UNTRACKED_COUNT=$( echo " $SVN_STATUS " | grep -c " ^?" || echo " 0" )
134-
135- echo " Added (A): $ADDED_COUNT files"
136- if [ " $MODIFIED_COUNT " -gt 0 ]; then
137- echo " Modified (M): $MODIFIED_COUNT files"
138- fi
139- if [ " $UNTRACKED_COUNT " -gt 0 ]; then
140- echo " ⚠️ Untracked (?): $UNTRACKED_COUNT files (will be ignored)"
141- fi
142- echo " "
143- TOTAL_CHANGES=$(( ADDED_COUNT + MODIFIED_COUNT))
144- echo " Total files to commit: $TOTAL_CHANGES files"
145- else
146- echo " (No changes detected - files are up to date)"
147- fi
148- echo " =========================================="
149- echo " "
150-
151- if [[ " $DRY_RUN " == " true" ]]; then
152- if [ " $TOTAL_CHANGES " -gt 0 ]; then
153- echo " 🧪 DRY RUN: Would commit $TOTAL_CHANGES files to version folder $VERSION_DIR "
154- echo " Commit message: Upload v${THEME_VERSION} "
155- else
156- echo " 🧪 DRY RUN: No changes to commit (files are up to date)"
157- fi
158- echo " 🚫 No actual commit performed (dry-run mode)"
159- else
160- if [ " $TOTAL_CHANGES " -gt 0 ]; then
161- echo " Commit files to version folder $VERSION_DIR "
162- svn ci -m " Upload v${THEME_VERSION} " --no-auth-cache --non-interactive --username " $SVN_USERNAME " --password " $SVN_PASSWORD "
163-
164- cd $SVN_PATH
165- svn update
166- else
167- echo " ⚠️ No changes to commit - files are already up to date"
168- fi
169- fi
78+ cd $SVN_PATH
79+ svn update
17080
17181echo " Remove the SVN folder from the workspace"
17282rm -rf $SVN_PATH
@@ -175,4 +85,3 @@ echo "Back to the workspace root"
17585cd $GITHUB_WORKSPACE
17686
17787echo " Theme deployment complete: v${THEME_VERSION} "
178-
0 commit comments