4343 - name : Build documentation
4444 run : |
4545 sphinx-build -b html docs docs/_build/html
46+ test -f docs/_build/html/index.html
4647
4748 - name : Upload documentation artifact
4849 uses : actions/upload-artifact@v7
@@ -51,29 +52,56 @@ jobs:
5152 path : docs/_build/html/
5253 if-no-files-found : error
5354
54- - name : Clean remote target
55+ - name : Create release id
56+ id : release
57+ run : echo "id=$(date -u +%Y%m%d%H%M%S)-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
58+
59+ - name : Prepare remote release
5560 uses : appleboy/ssh-action@v1.2.0
5661 with :
5762 host : ${{ secrets.DEPLOY_HOST }}
5863 port : ${{ secrets.DEPLOY_PORT }}
5964 username : ${{ secrets.DEPLOY_USER }}
6065 key : ${{ secrets.DEPLOY_SSH_KEY }}
6166 script : |
62- mkdir -p ${{ secrets.DEPLOY_PATH }}
63- find ${{ secrets.DEPLOY_PATH }} -mindepth 1 -delete
67+ set -e
68+ base="${{ secrets.DEPLOY_PATH }}"
69+ release="$base/releases/${{ steps.release.outputs.id }}"
70+ mkdir -p "$base/releases"
71+ rm -rf "$release"
72+ mkdir -p "$release"
6473
65- - name : Upload docs via SCP
74+ - name : Upload docs to release
6675 uses : appleboy/scp-action@v0.1.7
6776 with :
6877 host : ${{ secrets.DEPLOY_HOST }}
6978 port : ${{ secrets.DEPLOY_PORT }}
7079 username : ${{ secrets.DEPLOY_USER }}
7180 key : ${{ secrets.DEPLOY_SSH_KEY }}
7281 source : " docs/_build/html/*"
73- target : ${{ secrets.DEPLOY_PATH }}
82+ target : ${{ secrets.DEPLOY_PATH }}/releases/${{ steps.release.outputs.id }}
7483 strip_components : 3
7584
76- - name : Reload nginx
85+ - name : Activate release
86+ uses : appleboy/ssh-action@v1.2.0
87+ with :
88+ host : ${{ secrets.DEPLOY_HOST }}
89+ port : ${{ secrets.DEPLOY_PORT }}
90+ username : ${{ secrets.DEPLOY_USER }}
91+ key : ${{ secrets.DEPLOY_SSH_KEY }}
92+ script : |
93+ set -e
94+ base="${{ secrets.DEPLOY_PATH }}"
95+ release="$base/releases/${{ steps.release.outputs.id }}"
96+ test -f "$release/index.html"
97+ ln -sfn "$release" "$base/current.next"
98+ mv -Tf "$base/current.next" "$base/current"
99+ current="$(readlink -f "$base/current")"
100+ find "$base/releases" -mindepth 1 -maxdepth 1 -type d \
101+ ! -samefile "$current" \
102+ -exec rm -rf {} +
103+
104+ - name : Reload nginx (optional)
77105 uses : appleboy/ssh-action@v1.2.0
78106 with :
79107 host : ${{ secrets.DEPLOY_HOST }}
0 commit comments