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=/home/reactjs/Wdipl-react" >> $GITHUB_ENV echo "AUTH_TYPE=passwd" >> $GITHUB_ENV #echo "PM2_ID=wdipl_frontend[3001]" >> $GITHUB_ENV echo "HOST=${{ secrets.PRODUCTION_SERVER_HOST }}" >> $GITHUB_ENV echo "USERNAME=${{ secrets.PRODUCTION_SERVER_USERNAME }}" >> $GITHUB_ENV echo "PASSWORD=${{ secrets.PRODUCTION_SERVER_PASSWORD }}" >> $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 i && npm run build #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 i && npm run build echo "Reloading PM2..." pm2 reload "$PM2_ID" echo "Recent Logs:" pm2 logs "$PM2_ID" --lines 50 --nostream