From 66fb1a041610f1bf161a219de5c6ae9fac7be9eb Mon Sep 17 00:00:00 2001 From: Rajendra Reddy Date: Tue, 14 Apr 2026 16:46:04 +0000 Subject: [PATCH] Add .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 139 ++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 .gitea/workflows/deploy.yml diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..c2867f3 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,139 @@ +name: Deployment + +on: + push: + branches: + - beta + - testing + - staging + - production + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code in Runner + uses: actions/checkout@v3 + + - name: Branch and Folder Selection for Deployment + run: | + BRANCH_NAME=${{ gitea.ref_name }} + + case $BRANCH_NAME in + beta) + echo "PROJECT_FOLDER=/home/user/app-beta" >> $GITHUB_ENV + echo "AUTH_TYPE=passwd" >> $GITHUB_ENV + echo "PM2_ID=app-beta[3000]" >> $GITHUB_ENV + echo "HOST=${{ secrets.BETA_SERVER_HOST }}" >> $GITHUB_ENV + echo "USERNAME=${{ secrets.BETA_SERVER_USERNAME }}" >> $GITHUB_ENV + echo "PASSWORD=${{ secrets.BETA_SERVER_PASSWORD }}" >> $GITHUB_ENV + echo "PORT=${{ secrets.BETA_SERVER_PORT }}" >> $GITHUB_ENV + ;; + + testing) + echo "PROJECT_FOLDER=/home/user/app-testing" >> $GITHUB_ENV + echo "AUTH_TYPE=passwd" >> $GITHUB_ENV + echo "PM2_ID=app-testing[3001]" >> $GITHUB_ENV + echo "HOST=${{ secrets.BETA_SERVER_HOST }}" >> $GITHUB_ENV + echo "USERNAME=${{ secrets.BETA_SERVER_USERNAME }}" >> $GITHUB_ENV + echo "PASSWORD=${{ secrets.BETA_SERVER_PASSWORD }}" >> $GITHUB_ENV + echo "PORT=${{ secrets.BETA_SERVER_PORT }}" >> $GITHUB_ENV + ;; + + staging) + echo "PROJECT_FOLDER=/var/www/app-staging" >> $GITHUB_ENV + echo "AUTH_TYPE=key" >> $GITHUB_ENV + echo "PM2_ID=app-staging[4000]" >> $GITHUB_ENV + echo "HOST=${{ secrets.STAGING_SERVER_HOST }}" >> $GITHUB_ENV + echo "USERNAME=${{ secrets.STAGING_SERVER_USERNAME }}" >> $GITHUB_ENV + echo "PORT=${{ secrets.STAGING_SERVER_PORT }}" >> $GITHUB_ENV + ;; + + production) + echo "PROJECT_FOLDER=/var/www/app-prod" >> $GITHUB_ENV + echo "AUTH_TYPE=key" >> $GITHUB_ENV + echo "PM2_ID=app-prod[5000]" >> $GITHUB_ENV + echo "HOST=${{ secrets.PRODUCTION_SERVER_HOST }}" >> $GITHUB_ENV + echo "USERNAME=${{ secrets.PRODUCTION_SERVER_USERNAME }}" >> $GITHUB_ENV + echo "PORT=${{ secrets.PRODUCTION_SERVER_PORT }}" >> $GITHUB_ENV + ;; + + *) + echo "Unknown Branch" + exit 1 + ;; + esac + + echo "BRANCH_NAME=${{ gitea.ref_name }}" >> $GITHUB_ENV + echo "SELECTED BRANCH : $BRANCH_NAME" + echo "SELECTED FOLDER : $PROJECT_FOLDER" + + - name: Deployment via SSH (Password) + if: env.AUTH_TYPE == 'passwd' + uses: appleboy/ssh-action@v1 + with: + host: ${{ env.HOST }} + username: ${{ env.USERNAME }} + password: ${{ env.PASSWORD }} + port: ${{ env.PORT }} + envs: BRANCH_NAME,PROJECT_FOLDER,PM2_ID + script: | + set -xe + + # PM2_ID supports names like: app-name[port] + # Always wrap in quotes to avoid shell issues + + echo $BRANCH_NAME + echo $PROJECT_FOLDER + + cd $PROJECT_FOLDER + + git fetch + git reset --hard origin/$BRANCH_NAME + git pull origin $BRANCH_NAME + + echo "Latest commits:" + git log --oneline -5 + + echo "Installing dependencies..." + npm install + + echo "Reloading PM2..." + pm2 reload "$PM2_ID" + + echo "Recent Logs:" + pm2 logs "$PM2_ID" --lines 50 --nostream + + - name: Deployment via SSH (Key) + if: env.AUTH_TYPE == 'key' + uses: appleboy/ssh-action@v1 + with: + host: ${{ env.HOST }} + username: ${{ env.USERNAME }} + key: ${{ gitea.ref_name == 'production' && secrets.PRODUCTION_SERVER_KEY || secrets.STAGING_SERVER_KEY }} + port: ${{ env.PORT }} + envs: BRANCH_NAME,PROJECT_FOLDER,PM2_ID + script: | + set -xe + + echo $BRANCH_NAME + echo $PROJECT_FOLDER + + cd $PROJECT_FOLDER + + git fetch + git reset --hard origin/$BRANCH_NAME + git pull origin $BRANCH_NAME + + echo "Latest commits:" + git log --oneline -5 + + echo "Installing dependencies..." + npm install + + echo "Reloading PM2..." + pm2 reload "$PM2_ID" + + echo "Recent Logs:" + pm2 logs "$PM2_ID" --lines 50 --nostream \ No newline at end of file