mirror of
				https://github.com/SamKirkland/FTP-Deploy-Action.git
				synced 2025-10-31 16:03:58 +00:00 
			
		
		
		
	FTP Deploy GitHub Action
Automate deploying websites and more with this GitHub action.
Usage Example (Your_Project/.github/workflows/main.yml)
on: push
name: Publish Website
jobs:
  FTP-Deploy-Action:
    name: FTP-Deploy-Action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: FTP-Deploy-Action
      uses: SamKirkland/FTP-Deploy-Action@master
      env:
        FTP_SERVER: ftp.samkirkland.com
        FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
        FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
        ARGS: --delete
        # --delete arg will delete files on the server if you've deleted them in git
- Select the repository you want to add the action to
- Select the actions tab (currently only for beta testers)
- Select Blank workflow fileorSet up a workflow yourself, if you don't see these options manually create a yaml fileYour_Project/.github/workflows/main.yml
- Paste the above code into your file and save
- Now you need to add a few keys to the secretssection in your project, the following are required at a minimum. To add asecretgo to theSettingstab in your project then selectSecrets. Add a newSecretfor each of the following- FTP_SERVER
- FTP_USERNAME
- FTP_PASSWORD
- (see optional settings below)
 
Settings
To add a secret go to the Settings tab in your project then select Secrets. Add a new Secret for each of the following.
I recommend you use a secrets to store your FTP_USERNAME and FTP_PASSWORD.
| Key Name | Required? | Example | Default | Description | 
|---|---|---|---|---|
| FTP_SERVER | Yes | ftp.samkirkland.com | N/A | FTP server name (you may need to specify a port) | 
| FTP_USERNAME | Yes | git-action@samkirkland.com | N/A | FTP account username | 
| FTP_PASSWORD | Yes | CrazyUniquePassword&%123 | N/A | FTP account password | 
| LOCAL_DIR | No | build | . (root project folder) | The local folder to copy, defaults to root project folder. Do NOT include slashes for folders. | 
| REMOTE_DIR | No | serverFolder | . (root FTP folder) | The remote folder to copy to, deafults to root FTP folder (I recommend you configure this on your server side instead of here). Do NOT include slashes for folders. | 
| ARGS | No | See Commonly used ARGSsection below | N/A | Custom lftp arguments, this field is passed through directly into the lftp script. | 
Commonly used ARGS
Custom lftp arguments, this field is passed through directly into the lftp script. See lftp's website for all options. You can use as many arguments as you want, seperate them with a space
| Argument | Description | 
|---|---|
| --delete | Delete files not present at the source | 
| --transfer-all | Transfer all files, even seemingly the same at the target site | 
| --dry-run | Ouputs files that will be modified without making any actual changes | 
| --include= | Include matching files | 
| --exclude= | Exclude matching files | 
| --include-glob=GP | Include matching files (GP is a glob pattern, e.g. *.zip) | 
| --exclude-glob=GP | Exclude matching files (GP is a glob pattern, e.g. *.zip) | 
| --no-empty-dirs | Don't create empty directories | 
Common Examples
Build and Publish React/Angular/Vue/Node Website
Make sure you have an npm script named 'build'. This config should work for most node built websites
on: push
name: Build and Publish Front End Framework Website
jobs:
  FTP-Deploy-Action:
    name: FTP-Deploy-Action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    
    - name: Use Node.js 12.x
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'
        
    - name: Build Project
      run: |
        npm install
        npm run build --if-present
        
    - name: List output files
      run: ls
      
    - name: FTP-Deploy-Action
      uses: SamKirkland/FTP-Deploy-Action@master
      env:
        FTP_SERVER: ftp.samkirkland.com
        FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
        FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
        LOCAL_DIR: build
        ARGS: --delete
Log only dry run: Use this mode for testing
Ouputs a list of files that will be created/modified to sync your source without making any actual changes
on: push
name: Publish Website Dry Run
jobs:
  FTP-Deploy-Action:
    name: FTP-Deploy-Action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: FTP-Deploy-Action
      uses: SamKirkland/FTP-Deploy-Action@master
      env:
        FTP_SERVER: ftp.samkirkland.com
        FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
        FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
        ARGS: --delete --dry-run
Want another example? Let me know by creating a github issue
FAQ
- rm: Access failed: 553 Prohibited file name: ./.ftpquota- The .ftpquotafile is created by some FTP Servers and cannot be modified by the user
- Fix: Add --exclude=.ftpquotato your ARGS
 
- The 
Deprecated main.workflow config (used for beta/legacy apps that haven't been migrated to .yaml workflows yet)
action "FTP-Deploy-Action" {
   uses = "SamKirkland/FTP-Deploy-Action@master"
   secrets = ["FTP_USERNAME", "FTP_PASSWORD", "FTP_SERVER"]
}
Debugging locally
Instructions for debugging on windows
- Install docker for windows
- Open powershell
- Navigate to the repo folder
- Run docker build --tag action .
- (Optional) This step is only required when editing entrypoint.sh due to windows editors saving the file with windows line breaks instead of linux line breaks
- Download http://dos2unix.sourceforge.net/
- In another powershell window nagivate to the dos2unix folder /bin
- Run this command every time you modify entrypoint.sh .\dos2unix.exe "{FULL_PATH_TO_REPO\entrypoint.sh}"
 
- Run docker run action
Instructions for debugging on linux
- Please submit a PR for linux instructions :)
ToDo
- SFTP example
- More examples
Pull Requests Welcome!
Description
				Deploys a GitHub project to a FTP server using GitHub actions
						
						
						
							
							actionactionscontinuous-deploymentcontinuous-integrationdeploy-actiondeployment-automationgithub-actions
						
						
						
							
								 Readme
							
						
						
							
								 MIT
							
						
						
						
							
							
							 2 MiB
						
					
					Languages
				
				
								
								
									TypeScript
								
								100%
							
						
					