fivem-resource-watcher GitHub Action allows you to restart resources automatically when changes are pushed.
- Detects change detection
- Restart only resources that have been changed
- Restart the whole server on changes
- Resource filters
- Works both on Linux and Windows
This allows you, as a server owner to have a Git Managed workflow for your server where you don't need to provide access to the VPS / Dedicated server or txAdmin console to your developers. They just push the changes to the git repository and they all get pulled and deployed automatically
Input | Description | Required | Default |
---|---|---|---|
restartIndividualResources | Restart resources individually or restart the whole server | false | true |
serverIP | IP of the FiveM server | true | |
serverPort | Port of the FiveM server | false | 30120 |
resourcesFolder | Resources folder name | false | resources |
resourcesToIgnore | List of resources that you want to ignore separated by spaces and not restart when changes are made to them | false | |
restartServerWhen0Players | Restart the server instead when there are no players on the server. (Takes priority over restartIndividualReesources ) |
false | false |
Video Tutorial / Showcase: https://youtu.be/I_FqjKvcjxY
This action alone only does part of the automation. In order to actually make the restarts useful, we need to pull the remote changes first on the Server so that the changes are live after the restart. This doc will go through all the changes that you need to make in order to have a fully working pipeline. Your deployment workflow will look like the following after the pipeline is set up:
- You make the changes in your local clone of the repository
- You push the changes to the repository
- The pipeline will pull the changes that you just pushed, into your server automatically
- The pipeline will only restart the resources that you made changes to automatically, or it will restart the whole server depending on what you have configured
Caution: The pipeline utilizes a protocol known as SSH to connect to your server and pull the changes. You should be aware of the risks involved if the SSH password leaks / is not too strong. Make sure to set a secure password for your user, or use SSH Keys instead.
The first thing that you need to do is enable RCON on your FiveM server.
- To do this, simply add the following to your
server.cfg
file:
rcon_password "somesecurepassword"
- then change
somesecurepassword
to a secure passphrase. - Once done, restart your server
This step is necessary only if you are using Windows. Linux users already have SSH enabled so this is not applicable to them.
If you are still reading this part then then you are using Windows and you need to install OpenSSH server on your VPS / Dedicated Server. To do that, follow these instructions:
- Connect / Login to your VPS / Dedicated server using RDP
- Open your browser and go to this link to download Win32-OpenSSH: https://github.com/PowerShell/Win32-OpenSSH/releases/download/v9.1.0.0p1-Beta/OpenSSH-Win64-v9.1.0.0.msi
- Install it by running the downloaded file
- Allow SSH connections through your firewall
- To do this, open terminal / powershell as administrator, type the following and press enter:
netsh advfirewall firewall add rule name="Open SSH Port 22" dir=in action=allow protocol=TCP localport=22 remoteip=any
- To do this, open terminal / powershell as administrator, type the following and press enter:
- Once done, you can test it out by opening a terminal / powershell on your local PC and type the following:
ssh <user>@<ip>
-
Replace
<user>
with the username that you use to login to your RDP -
Replace
<ip>
with the IP of the VPS that you use to connect to your RDP -
Type in your password for the user when asked
-
If everything was done correctly, you should see something like this on the terminal:
Microsoft Windows [Version 10.0.20348.169]
(c) Microsoft Corporation. All rights reserved.
administrator@WIN-17A7N1QL3J3 C:\Users\Administrator>
- Type
exit
to disconnect from the SSH session
Now that everything is configured on the FiveM server as well as VPS / Dedicated Server, we need to setup some secrets in your GitHub repository that you're using for your server resources.
- Go to your repository, for example: https://github.com/iLLeniumTest/ServerResources
- Click on
Settings
from the top bar - Click on
Secrets and variables
on the left navigation menu to expand it - Then click on
Actions
to start setting up secrets
Following are the secrets that you need to configure in that section:
Secret Name | Description |
---|---|
SSH_HOST | IP of your server which you use to login to your server (RDP or SSH) |
SSH_PASSWORD | Password for your user that you use to login to your server (RDP or SSH) (Not required when using SSH_KEY) |
SSH_KEY | Set this in case you are using Key based authentication. (Not required when using SSH_PASSWORD) |
RCON_PASSWORD | Password that you have set in your server.cfg using rcon_password |
- For every secret mentioned in the table above, click on
New Repository Secret
and add it - The
Name
field should have exactly the name of the secret from the table, for exampleSSH_HOST
. - The
Secret
field should have the value for the secret - Make sure that you have set all of the secrets correctly before proceeding, or the pipeline will not work
Note: SSH_PASSWORD
and SSH_KEY
secrets are mutually exclusive, you must either set 1 or the other. There's no need to set them both.
Now that we have configured the secrets as well, all that's left is to add the pipeline to your repository and change some of the parameters.
- Start by opening up the repository in Visual Studio Code or in your browser
- Create a new folder called
.github
in the root of your repository - Create a subfolder called
workflows
in the.github
folder that you just created - Create a new file called
sync.yaml
in.github/workflows
directory and paste the following contents into the file and save it:
name: "Sync and Restart Resources"
on:
push:
branches:
- main
jobs:
sync-restart:
runs-on: "ubuntu-latest"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: "Pull remote changes"
uses: appleboy/ssh-action@v0.1.7
env:
REPO_PATH: "C:/ServerResources"
with:
host: ${{ secrets.SSH_HOST }}
username: Administrator
#key: ${{ secrets.SSH_KEY }}
password: ${{ secrets.SSH_PASSWORD }}
port: 22
script: |
cd ${{ env.REPO_PATH }} && git pull
- name: "Restart resources / server"
uses: illeniumstudios/fivem-resource-watcher@main
env:
GITHUB_EVENT_BEFORE: ${{ github.event.before }}
with:
serverIP: ${{ secrets.SSH_HOST }}
serverPort: 30120
rconPassword: ${{ secrets.RCON_PASSWORD }}
restartIndividualResources: false
There's a couple of things that you need to change before pushing this file:
- On
Line 17
of the file, you need to set the folder path where you have cloned your repository on your remote VPS / Dedicated server. For example, if you are on Windows, it can be something likeC:/FiveM/MyRPServerResources
, or on Linux, it can be like/home/username/FiveM/MyRPServerResources
. - On
Line 20
, set the username that you use for logging into your VPS / Dedicated Server via RDP - Comment out
Line 22
and uncommentLine 21
if you're using an SSH key instead of a password for logging in. - On
Line 23
, set your SSH port if you have changed it explicitly. No need to do anything if you are using defaults. - Set your FiveM server port on
Line 32
if it is other than 30120 - Change
restartIndividualResources
totrue
onLine 34
if you want to restart the whole server after making changes. By default it is set tofalse
which only restarts the individual resources that you have made changes to.
After making the above changes, save the file and push it to the repository.
And you're done. Now you should have a working pipeline that will automatically pull the changes on your remote server (VPS / Dedicated Server) if you push anything and will also restart the resources automatically for you.