Skip to content

Build and deploy to server #14650

Build and deploy to server

Build and deploy to server #14650

Workflow file for this run

name: Build and deploy to server
on:
push:
branches: ["master"]
paths-ignore:
- ".github/**"
- ".docs/**"
workflow_dispatch:
inputs:
hash:
description: "Docs Staging Hash"
type: string
default: main
required: true
fallback:
description: "Fallback by hash"
type: boolean
default: false
required: false
concurrency: ci-prod
jobs:
build:
runs-on: ubuntu-latest
name: Build website
steps:
- name: Check disk usage
run: df -h
- name: Remove unused Docker images
run: docker system prune -af
- uses: actions/checkout@v3
with:
ref: "master"
- uses: actions/setup-node@v3
with:
node-version: 16
cache: "yarn"
- name: Update submodule
id: submodule
run: |
git submodule init
git submodule update --remote
cd docs
git checkout main
cd ..
echo "submodule_sha=$(git submodule status | awk '{print $1}' | sed -r 's/[+-]+//g')" >> $GITHUB_OUTPUT
echo "submodule_status=$(git submodule status)" >> $GITHUB_OUTPUT
echo "git_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
echo "build_date=$(date)" >> $GITHUB_OUTPUT
- name: Install deps
run: yarn
- name: Calc gatsby cache key
id: calc-cache-key
run: |
if ${{ !!inputs.fallback }}
then
echo "key=${{ inputs.hash }}" >> $GITHUB_OUTPUT
else
echo "key=${{ steps.submodule.outputs.submodule_sha }}" >> $GITHUB_OUTPUT
fi
- name: Restore gatsby cache
uses: actions/cache@v3
id: gatsby-cache
with:
path: |
.cache
public
key: ${{ runner.os }}-gatsby-cache-docs-staging-${{ steps.calc-cache-key.outputs.key }}
restore-keys: |
${{ runner.os }}-gatsby-cache-docs-staging-
- name: Clean up temporary files
run: |
sudo rm -rf /tmp/*
sudo rm -rf /home/runner/work/_temp/*
- name: Build website
if: ${{ !inputs.fallback || (steps.gatsby-cache.outputs.cache-hit != 'true') }}
env:
CI: true
GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }}
GATSBY_ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
GATSBY_DOC_BUILD_DATE: ${{ steps.submodule.outputs.build_date }}
GATSBY_DOC_BUILD_GIT_SHA: ${{ steps.submodule.outputs.git_sha }}
GATSBY_DOC_BUILD_SUBMODULE_SHA: ${{ steps.submodule.outputs.submodule_status }}
run: |
yarn build --verbose
- name: Check output
id: check-output
run: |
sudo apt install tree
tree public
- name: Set known_hosts
id: known-hosts
run: |
echo "BJ_PROXY=$(ssh-keyscan -H ${{ secrets.BJ_PROXY_HOST }})" >> $GITHUB_OUTPUT
echo "LA1=$(ssh-keyscan -H ${{ secrets.LA_1_HOST }})" >> $GITHUB_OUTPUT
echo "LA2=$(ssh-keyscan -H ${{ secrets.LA_2_HOST }})" >> $GITHUB_OUTPUT
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SSH_KEY }}
known_hosts: |
${{ steps.known-hosts.outputs.BJ_PROXY }}
${{ steps.known-hosts.outputs.LA1 }}
${{ steps.known-hosts.outputs.LA2 }}
- name: Deploy to LA1
run: |
rsync -avz --delete public/ "${{ secrets.SSH_USER }}@${{ secrets.LA_1_HOST }}:${{ secrets.DEPLOY_PATH }}"
- name: Deploy to LA2
run: |
rsync -avz --delete public/ "${{ secrets.SSH_USER }}@${{ secrets.LA_2_HOST }}:${{ secrets.DEPLOY_PATH }}"
- name: Deploy to BJ1
run: |
rsync -avz --delete -e 'ssh -p ${{ secrets.BJ_1_PROXY_PORT }} -o StrictHostKeyChecking=no' public/ "${{ secrets.SSH_USER }}@${{ secrets.BJ_PROXY_HOST }}:${{ secrets.DEPLOY_PATH }}"
- name: Deploy to BJ2
run: |
rsync -avz --delete -e 'ssh -p ${{ secrets.BJ_2_PROXY_PORT }} -o StrictHostKeyChecking=no' public/ "${{ secrets.SSH_USER }}@${{ secrets.BJ_PROXY_HOST }}:${{ secrets.DEPLOY_PATH }}"