name: Deploy (Test) on: workflow_dispatch: jobs: deploy: name: Deploy (Test) runs-on: ubuntu-latest environment: Deployments env: repository: 'jonnybarnes/jonnybarnes.uk' newReleaseName: '${{ github.run_id }}' steps: - name: 🌍 Set Environment Variables run: | echo "releasesDir=${{ secrets.DEPLOYMENT_BASE_DIR }}/releases" >> $GITHUB_ENV echo "persistentDir=${{ secrets.DEPLOYMENT_BASE_DIR }}/persistent" >> $GITHUB_ENV echo "currentDir=${{ secrets.DEPLOYMENT_BASE_DIR }}/current" >> $GITHUB_ENV - name: 🌎 Set Environment Variables Part 2 run: | echo "newReleaseDir=${{ env.releasesDir }}/${{ env.newReleaseName }}" >> $GITHUB_ENV - name: 🔄 Clone Repository uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | [ -d ${{ env.releasesDir }} ] || mkdir ${{ env.releasesDir }} [ -d ${{ env.persistentDir }} ] || mkdir ${{ env.persistentDir }} [ -d ${{ env.persistentDir }}/storage ] || mkdir ${{ env.persistentDir }}/storage cd ${{ env.releasesDir }} # Create new release directory mkdir ${{ env.newReleaseDir }} # Clone app git clone --depth 1 git@github.com:${{ env.repository }} ${{ env.newReleaseName }} # Mark release cd ${{ env.newReleaseDir }} echo "${{ env.newReleaseName }}" > public/release-name.txt - name: 🎵 Run Composer uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | cd ${{ env.newReleaseDir }} composer install --prefer-dist --no-scripts --no-dev --no-progress --optimize-autoloader --quiet --no-interaction - name: 🔗 Update Symlinks uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | # Import the environment config cd ${{ env.newReleaseDir }}; ln -nfs ${{ secrets.DEPLOYMENT_BASE_DIR }}/.env .env; - name: ✨ Optimize Installation uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | cd ${{ env.newReleaseDir }}; php artisan clear-compiled; - name: 🙈 Migrate database uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | cd ${{ env.newReleaseDir }} #php artisan migrate --force - name: 🙏 Bless release uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | ln -nfs ${{ env.newReleaseDir }} ${{ env.currentDir }}; cd ${{ env.newReleaseDir }} #php artisan horizon:terminate php artisan config:cache php artisan event:cache php artisan route:cache php artisan view:cache #sudo systemctl restart php-fpm.service #sudo supervisorctl restart all - name: 🚾 Clean up old releases uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOYMENT_HOST }} port: ${{ secrets.DEPLOYMENT_PORT }} username: ${{ secrets.DEPLOYMENT_USER }} key: ${{ secrets.DEPLOYMENT_KEY }} script: | cd ${{ env.releasesDir }} ls -dt ${{ env.releasesDir }}/* | tail -n +4 | xargs -d "\n" sudo chown -R ${{ secrets.DEPLOYMENT_USER }} .; ls -dt ${{ env.releasesDir }}/* | tail -n +4 | xargs -d "\n" rm -rf;