Updating dependencies: #145
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy | |
# Trigger the workflow on push and | |
# pull request events on the production branch | |
on: | |
push: | |
branches: | |
- main | |
# Authenticate to the server via ssh | |
# and run our deployment script | |
jobs: | |
create-deployment-artifacts: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Configure PHP 8.2 | |
uses: shivammathur/setup-php@master | |
with: | |
php-version: 8.2 | |
extensions: mbstring, ctype, fileinfo, openssl, PDO, bcmath, json, tokenizer, xml, pgsql | |
- name: Install Composer dependencies | |
run: composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader | |
- name: Clone .env before compiling | |
env: | |
LARAVEL_ENV: ${{ secrets.LARAVEL_ENV }} | |
run: | | |
echo "Copying the contents to .env" | |
printf "%s" "${LARAVEL_ENV}" > ".env" | |
- name: Compile CSS and Javascript | |
run: | | |
npm install | |
npm run build | |
- name: Create deployment artifact | |
env: | |
GITHUB_SHA: ${{github.sha}} | |
run: tar -czf "${GITHUB_SHA}".tar.gz --exclude=*.git --exclude=node_modules * | |
- name: Store artifact for distribution | |
uses: actions/upload-artifact@v3 | |
with: | |
name: app-build | |
path: ${{ github.sha }}.tar.gz | |
prepare-release-on-server: | |
runs-on: ubuntu-latest | |
needs: create-deployment-artifacts | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: app-build | |
- name: Copy files through SSH | |
uses: appleboy/scp-action@v0.1.6 | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
source: ${{github.sha}}.tar.gz | |
target: /home/blink-safety/artifacts | |
- name: Extract files and create directories | |
uses: appleboy/ssh-action@master | |
env: | |
GITHUB_SHA: ${{ github.sha }} | |
ARTIFACTS_DIR: /home/blink-safety/artifacts | |
BASE_DIR: /home/blink-safety | |
RELEASES_DIR: /home/blink-safety/releases | |
STORAGE_DIR: /home/blink-safety/storage | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
envs: GITHUB_SHA,ARTIFACTS_DIR,BASE_DIR,RELEASES_DIR,STORAGE_DIR | |
script: | | |
echo "Create a releases directory and unzip the artifact tar to a new folder" | |
mkdir -p "${RELEASES_DIR}/${GITHUB_SHA}" | |
tar xzf "${ARTIFACTS_DIR}/${GITHUB_SHA}.tar.gz" -C "${RELEASES_DIR}/${GITHUB_SHA}" | |
echo "Remove the release storage folder" | |
rm -rf "${RELEASES_DIR}/${GITHUB_SHA}/storage" | |
echo "Making sure that all the necessary storage folders are created and with the right permissions" | |
mkdir -p ${STORAGE_DIR}/{app,public,framework,logs} | |
mkdir -p ${STORAGE_DIR}/framework/{cache,sessions,testing,views} | |
mkdir -p ${STORAGE_DIR}/framework/cache/data | |
chgrp -R www-data ${STORAGE_DIR} ${RELEASES_DIR}/${GITHUB_SHA}/bootstrap/cache | |
chmod -R ug+rwx ${STORAGE_DIR} ${RELEASES_DIR}/${GITHUB_SHA}/bootstrap/cache | |
echo "Linking storage path to the release" | |
ln -s -n -f ${STORAGE_DIR} ${RELEASES_DIR}/${GITHUB_SHA} | |
run-before-hooks: | |
name: 'Running setup before activation' | |
runs-on: 'ubuntu-latest' | |
needs: [create-deployment-artifacts,prepare-release-on-server] | |
steps: | |
- name: Run before hooks | |
uses: appleboy/ssh-action@master | |
env: | |
GITHUB_SHA: ${{ github.sha }} | |
RELEASES_DIR: /home/blink-safety/releases | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
envs: GITHUB_SHA,RELEASES_DIR | |
script: | | |
cd ${RELEASES_DIR}/${GITHUB_SHA} | |
echo "Deployment started ..." | |
activate-release: | |
name: 'Activating the release' | |
runs-on: 'ubuntu-latest' | |
needs: [create-deployment-artifacts,prepare-release-on-server,run-before-hooks] | |
steps: | |
- name: Run before hooks | |
uses: appleboy/ssh-action@master | |
env: | |
GITHUB_SHA: ${{ github.sha }} | |
BASE_DIR: /home/blink-safety | |
RELEASES_DIR: /home/blink-safety/releases | |
ACTIVE_RELEASE_DIR: /home/blink-safety/current | |
LARAVEL_ENV: ${{ secrets.LARAVEL_ENV }} | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
envs: GITHUB_SHA,BASE_DIR,RELEASES_DIR,ACTIVE_RELEASE_DIR,LARAVEL_ENV | |
script: | | |
echo "Copying the contents to .env" | |
printf "%s" "${LARAVEL_ENV}" > "${BASE_DIR}/.env" | |
ln -s -n -f ${BASE_DIR}/.env ${RELEASES_DIR}/${GITHUB_SHA} | |
echo "Running database migrations and seeding the database" | |
cd ${RELEASES_DIR}/${GITHUB_SHA} | |
php artisan migrate --force | |
php artisan db:seed --force | |
echo "Binding public storage" | |
php artisan storage:link | |
echo "Activating the new release" | |
ln -s -n -f ${RELEASES_DIR}/${GITHUB_SHA} ${ACTIVE_RELEASE_DIR} | |
echo "Reloading PHP8.2-FPM" | |
service php8.2-fpm reload | |
run-after-hooks: | |
name: 'Running hooks after setup' | |
runs-on: 'ubuntu-latest' | |
needs: [create-deployment-artifacts,prepare-release-on-server,run-before-hooks,activate-release] | |
steps: | |
- name: Run after hooks | |
uses: appleboy/ssh-action@master | |
env: | |
GITHUB_SHA: ${{ github.sha }} | |
ACTIVE_RELEASE_DIR: /home/blink-safety/current | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
envs: GITHUB_SHA,ACTIVE_RELEASE_DIR | |
script: | | |
cd ${ACTIVE_RELEASE_DIR} | |
echo "Caching events" | |
php artisan event:cache | |
echo "Caching routes" | |
php artisan route:cache | |
echo "Caching views" | |
php artisan view:cache | |
echo "Update the events" | |
php artisan app:retrieve-st-petersburg-data | |
echo "Deployment finished ..." | |
clean-up: | |
name: 'Clean up the server' | |
runs-on: 'ubuntu-latest' | |
needs: [ create-deployment-artifacts,prepare-release-on-server,run-before-hooks,activate-release,run-after-hooks] | |
steps: | |
- name: Run clean up | |
uses: appleboy/ssh-action@master | |
env: | |
RELEASES_DIR: /home/blink-safety/releases | |
ARTIFACTS_DIR: /home/blink-safety/artifacts | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
port: ${{ secrets.PORT }} | |
key: ${{ secrets.SSHKEY }} | |
envs: RELEASES_DIR,ARTIFACTS_DIR | |
script: | | |
cd ${RELEASES_DIR} && ls -t -1 | tail -n +5 | xargs rm -Rf | |
cd ${ARTIFACTS_DIR} && ls -t -1 | tail -n +5 | xargs rm -Rf | |