diff --git a/install.zsh b/install.zsh index 89834ea..6b59dfd 100755 --- a/install.zsh +++ b/install.zsh @@ -128,16 +128,57 @@ function at-repos-social-app-avatar-write() { grep -R $did_admin .|cut -d : -f 1|sort -u|xargs sed -i "s/${did_admin}/${did}/g" } +# Common patch function with status detection +function apply-patch() { + local patch_name=$1 + local target_dir=$2 + local patch_file=$3 + + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "📝 Patch: ${patch_name}" + echo " Target: ${target_dir}" + echo " File: ${patch_file}" + + pushd ${target_dir} > /dev/null + + # Check if patch is already applied (reverse dry-run succeeds) + if patch --dry-run -p1 -R < ${patch_file} > /dev/null 2>&1; then + echo "✅ Already applied - skipping" + popd > /dev/null + echo "" + return 0 + fi + + # Check if patch can be applied (forward dry-run succeeds) + if patch --dry-run -p1 < ${patch_file} > /dev/null 2>&1; then + echo "🔧 Applying patch..." + if patch -p1 < ${patch_file}; then + echo "✅ Applied successfully" + popd > /dev/null + echo "" + return 0 + else + echo "❌ Failed to apply" + popd > /dev/null + echo "" + return 1 + fi + else + echo "⚠️ Cannot apply - file may have been modified" + echo " Please check manually" + popd > /dev/null + echo "" + return 1 + fi +} + function at-repos-atproto-service-bsky-api-patch() { # https://github.com/itaru2622/bluesky-selfhost-env/blob/master/patching/105-atproto-services-for-docker.diff f=$d/repos/atproto/services/bsky/api.js curl -sL https://raw.githubusercontent.com/bluesky-social/atproto/refs/heads/main/services/bsky/api.js -o $f d_=$d/repos/atproto p_=$d/patching/4367-atproto-services-bsky-api.diff - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + apply-patch "Bsky api.js" "${d_}" "${p_}" } function at-repos-atproto-service-pds-index-patch() { @@ -145,70 +186,44 @@ function at-repos-atproto-service-pds-index-patch() { curl -sL https://raw.githubusercontent.com/bluesky-social/atproto/refs/heads/main/services/pds/index.js -o $f d_=$d/repos/atproto p_=$d/patching/4367-atproto-services-pds-index.diff - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + apply-patch "PDS index.js" "${d_}" "${p_}" } function at-repos-atproto-oauth-same-site-patch() { f=$d/repos/atproto/packages/oauth/oauth-provider/src/router/create-authorization-page-middleware.ts d_=$d/repos/atproto p_=$d/patching/170-pds-oauth-same-site-fix.patch - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + apply-patch "OAuth same-site fix" "${d_}" "${p_}" } function at-repos-social-app-agent-patch() { - f=$d/repos/social-app/src/state/session/agent.ts - p_=$d/patching/8980-social-app-disable-proxy.diff d_=$d/repos/social-app - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + p_=$d/patching/8980-social-app-disable-proxy.diff + apply-patch "Social-app disable proxy" "${d_}" "${p_}" } function at-repos-social-app-disable-external-services-patch() { - f=$d/repos/social-app/src/state/geolocation/const.ts - p_=$d/patching/8980-social-app-disable-external-services.diff d_=$d/repos/social-app - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + p_=$d/patching/8980-social-app-disable-external-services.diff + apply-patch "Social-app disable external services" "${d_}" "${p_}" } function at-repos-social-app-statsig-patch() { - f=$d/repos/social-app/src/lib/statsig/statsig.tsx - p_=$d/patching/disable-statsig-sdk.diff d_=$d/repos/social-app - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + p_=$d/patching/disable-statsig-sdk.diff + apply-patch "Social-app disable statsig" "${d_}" "${p_}" } function at-repos-social-app-dockerfile-yarn-timeout-patch() { - f=$d/repos/social-app/Dockerfile - p_=$d/patching/140-social-app-yarn-network-timeout.patch d_=$d/repos/social-app - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + p_=$d/patching/140-social-app-yarn-network-timeout.patch + apply-patch "Social-app yarn timeout" "${d_}" "${p_}" } function at-repos-atproto-service-ozone-api-patch() { - f=$d/repos/atproto/services/ozone/api.js d_=$d/repos/atproto p_=$d/patching/130-atproto-ozone-enable-daemon-v2.patch - echo "applying patch: under ${f} for ${p_}" - pushd ${d_} - patch -p1 < ${p_} - popd + apply-patch "Ozone enable daemon" "${d_}" "${p_}" } function at-repos-ozone-patch() { @@ -326,16 +341,51 @@ function at-repos-pull-docker() { } at-repos-env +case "$1" in + pull) + at-repos-clone + at-repos-pull + exit + ;; + patch) + at-repos-social-app-icon + at-repos-social-app-icon-origin + at-repos-social-app-avatar-write + at-repos-social-app-agent-patch + at-repos-social-app-disable-external-services-patch + at-repos-social-app-statsig-patch + at-repos-social-app-dockerfile-yarn-timeout-patch + at-repos-atproto-service-bsky-api-patch + at-repos-atproto-service-pds-index-patch + at-repos-atproto-oauth-same-site-patch + at-repos-atproto-service-ozone-api-patch + at-repos-ozone-patch + exit + ;; + build) + at-repos-build-docker-atproto $2 + exit + ;; + push) + at-repos-push-docker $2 + exit + ;; + reset) + at-repos-push-reset + exit + ;; + down) + cd $d;docker compose down + exit + ;; +esac + case "`cat /etc/hostname`" in at) at-repos-pull-docker exit ;; *) - if [ "$1" = "r" ];then - at-repos-push-reset - exit - fi at-repos-clone at-repos-pull at-repos-social-app-icon @@ -350,14 +400,8 @@ case "`cat /etc/hostname`" in at-repos-atproto-oauth-same-site-patch at-repos-atproto-service-ozone-api-patch at-repos-ozone-patch - if [ -n "$1" ];then - at-repos-build-docker-atproto $1 - at-repos-push-docker $1 - exit - fi at-repos-build-docker-atproto at-repos-push-docker cd $d; docker compose down ;; esac -