name: PROJECT_NAME on: push: branches: - main - beta - testing - client - staging - production jobs: Build-PROJECT_NAME: 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=/PATH/TO/BETA/PROJECT" >> $GITHUB_ENV PROJECT_FOLDER="/PATH/TO/BETA/PROJECT" echo "AUTH_TYPE=passwd" >> $GITHUB_ENV echo "PM2_ID=BETA_PM2_ID" >> $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=/PATH/TO/TESTING/PROJECT" >> $GITHUB_ENV PROJECT_FOLDER="/PATH/TO/TESTING/PROJECT" echo "AUTH_TYPE=passwd" >> $GITHUB_ENV echo "PM2_ID=TESTING_PM2_ID" >> $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 ;; client) echo "PROJECT_FOLDER=/PATH/TO/CLIENT/PROJECT" >> $GITHUB_ENV PROJECT_FOLDER="/PATH/TO/CLIENT/PROJECT" echo "AUTH_TYPE=passwd" >> $GITHUB_ENV echo "PM2_ID=CLIENT_PM2_ID" >> $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=/PATH/TO/STAGING/PROJECT" >> $GITHUB_ENV PROJECT_FOLDER="/PATH/TO/STAGING/PROJECT" echo "AUTH_TYPE=key" >> $GITHUB_ENV echo "PM2_ID=STAGING_PM2_ID" >> $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=/PATH/TO/PRODUCTION/PROJECT" >> $GITHUB_ENV PROJECT_FOLDER="/PATH/TO/PRODUCTION/PROJECT" echo "AUTH_TYPE=key" >> $GITHUB_ENV echo "PM2_ID=PRODUCTION_PM2_ID" >> $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 to Server SSH 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 echo $BRANCH_NAME echo $PROJECT_FOLDER cd $PROJECT_FOLDER git fetch git reset --hard origin/$BRANCH_NAME git pull origin $BRANCH_NAME npm i pm2 restart $PM2_ID - name: Deployment to Server SSH 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 npm i pm2 restart $PM2_ID