name: Code Deployment and Environment Setup on: push: branches: - main jobs: build: name: Run remote SSH commands runs-on: ubuntu-latest steps: - name: Clone or pull repository uses: appleboy/ssh-action@v0.1.10 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.KEY }} script_stop: false script: | if [ -d ${{ secrets.PATH }} ]; then cd ${{ secrets.PATH }} git pull else mkdir -p ${{ secrets.PATH }} cd ${{ secrets.PATH }} git clone git@github.com:${{ github.repository }}.git . fi - name: Update environment variables uses: appleboy/ssh-action@v0.1.10 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.KEY }} script_stop: false script: | # Bash function to replace env variables replace_env() { local env_var=$1 local new_value=$2 awk -v var="${env_var}" -v val="${new_value}" -F '=' '{OFS=FS} $1 == var {$2 = val} 1' .env > .env.tmp && mv .env.tmp .env } cd ${{ secrets.PATH }} # Replace .env with vars replace_env 'NAME' '${{ vars.NAME }}' replace_env 'ASTRO_HOST' '${{ vars.ASTRO_HOST }}' replace_env 'PAYLOAD_HOST' '${{ vars.PAYLOAD_HOST }}' replace_env 'PAYLOAD_URL' '${{ vars.PAYLOAD_URL }}' replace_env 'PAYLOAD_PORT' '${{ vars.PAYLOAD_PORT }}' # Replace .env with secrets replace_env 'PAYLOAD_SECRET' '${{ secrets.PAYLOAD_SECRET }}' replace_env 'MONGODB_URI' 'mongodb://${{ secrets.MONGODB_USER }}:${{ secrets.MONGODB_PW }}@mongo:27017' replace_env 'MONGODB_USER' '${{ secrets.MONGODB_USER }}' replace_env 'MONGODB_PW' '${{ secrets.MONGODB_PW }}' replace_env 'TOKEN' '${{ secrets.TOKEN }}' # Replace .env with GitHub repository replace_env 'REPOSITORY' '${{ github.repository }}' mkdir -p ./astro cp .env ./astro/.env - name: Start Production Services uses: appleboy/ssh-action@v0.1.10 with: host: ${{ secrets.HOST }} username: ${{ secrets.USER }} key: ${{ secrets.KEY }} script: | cd ${{ secrets.PATH }} yarn prod payload yarn prod astro