web-deploy
web-deploy copied to clipboard
Web-deploy keeps deleting manually created files and folders
Bug Description Whenever I run the web-deploy action in my server, all files and folders that does not exist in the git repo are automatically deleted from the server.
For example, I have a file .env
and this file is not included in the github repo, but whenever I run the deploy script, it is automatically deleted from the server. Same goes for folders which are created manually in the server.
My Action Config
on:
push:
branches:
- production
name: ๐ Deploy files to the production server on push to production branch
jobs:
deploy:
name: ๐ Deploy files
runs-on: ubuntu-latest
steps:
- name: ๐ Get latest code
uses: actions/checkout@v4
- name: Setup PHP ๐
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
- name: Cache Composer Packages ๐ฆ
id: composer-cache
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Install Dependencies ๐จโ๐ฉโ๐งโ๐ฆ
run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader
- name: ๐ Sync files
uses: SamKirkland/web-deploy@v1
with:
target-server: example.com
remote-user: ${{ secrets.do_sftp_username }}
private-ssh-key: ${{ secrets.do_application_ssh_key }}
destination-path: ~/public_html/
source-path: ./
ssh-port: 22
rsync-options: --archive --verbose --compress --delete-after --human-readable --exclude=.git* --exclude=.git/ --exclude=README.md --exclude=readme.md --exclude=.gitignore --exclude "misc/" --exclude "src/" --exclude "*.txt"
What could be the problem?
Looks like the rsync-option: ... --delete-after
is doing that.
That will delete every file, which is not part of the Repository like the .env
file.
I'm not sure how rsync handles that if you still use --delete-after
with the --exclude=.env
, but I'm pretty sure you should give it a try without the --delete-after
parameter.
See https://man7.org/linux/man-pages/man1/rsync.1.html ( Search: "--delete-after")
Update:
I just did a test with the "vendor" folder (since it's common in PHP projects), which shouldn't be deleted after rsync (just for that case).
If I add the --exclude=vendor
parameter to the existing parameter list (based on your example), the folder still persist after sync.
Thanks @AryaSvitkona.
If I add the
--exclude=vendor
parameter to the existing parameter list (based on your example), the folder still persist after sync.
Did you include the --delete-after
option?
Yes, exactly. See an example below which works for us.
`jobs: web-deploy: name: ๐ Deploy website runs-on: ubuntu-latest # to change if: github.ref == 'refs/heads/main' steps: - name: ๐ Get latest code uses: actions/checkout@v3
- name: ๐ Sync Files
uses: SamKirkland/web-deploy@v1
with:
target-server: ...
remote-user: ...
private-ssh-key: ...
source-path: ./
destination-path: ~/www/foobar/foobar/wp-content/plugins/pluginname/
rsync-options: --archive --verbose --compress --human-readable --progress --delete-after --exclude=vendor`