mirror of
https://github.com/LukeHagar/unicorn-utterances.git
synced 2025-12-06 12:57:44 +00:00
chore: use DigitalOcean spaces for deployment
This commit is contained in:
74
.github/workflows/deploy-beta.yml
vendored
Normal file
74
.github/workflows/deploy-beta.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
name: deploy-beta
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI: true
|
||||
steps:
|
||||
- name: Create GitHub deployment
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
id: deployment
|
||||
with:
|
||||
step: start
|
||||
token: ${{ github.token }}
|
||||
env: beta
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
|
||||
# From: https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#example-using-the-cache-action
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-node-modules
|
||||
with:
|
||||
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||
${{ runner.os }}-build-
|
||||
${{ runner.os }}-
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
run: npm run build-beta
|
||||
|
||||
- uses: jakejarvis/s3-sync-action@v0.5.1
|
||||
name: Sync files to DigitalOcean Spaces
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks --delete
|
||||
env:
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
AWS_S3_ENDPOINT: https://sfo2.digitaloceanspaces.com
|
||||
SOURCE_DIR: public
|
||||
DEST_DIR: beta
|
||||
|
||||
- name: Install doctl
|
||||
uses: digitalocean/action-doctl@v2
|
||||
with:
|
||||
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
|
||||
|
||||
- name: Flush DigitalOcean Spaces cache
|
||||
run: doctl compute cdn flush ${{ secrets.DIGITALOCEAN_CDN_ID }} --files beta/*
|
||||
|
||||
- name: Update deployment status
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
if: always()
|
||||
with:
|
||||
step: finish
|
||||
token: ${{ github.token }}
|
||||
status: ${{ job.status }}
|
||||
deployment_id: ${{ steps.deployment.outputs.deployment_id }}
|
||||
env_url: https://beta.unicorn-utterances.com
|
||||
83
.github/workflows/deploy-dev.yml
vendored
Normal file
83
.github/workflows/deploy-dev.yml
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
name: deploy-dev
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
if: github.repository_owner === 'unicorn-utterances'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI: true
|
||||
steps:
|
||||
# see https://dev.to/bobheadxi/branch-previews-with-google-app-engine-and-github-actions-3pco
|
||||
- name: Extract branch name
|
||||
id: get_branch
|
||||
shell: bash
|
||||
env:
|
||||
PR_HEAD: ${{ github.head_ref }}
|
||||
run: echo "##[set-output name=branch;]$(echo ${PR_HEAD#refs/heads/} | tr / -)"
|
||||
|
||||
- name: Create GitHub deployment
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
id: deployment
|
||||
with:
|
||||
step: start
|
||||
token: ${{ github.token }}
|
||||
env: ${{ steps.get_branch.outputs.branch }}
|
||||
ref: ${{ github.head_ref }}
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
|
||||
# From: https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#example-using-the-cache-action
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-node-modules
|
||||
with:
|
||||
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||
${{ runner.os }}-build-
|
||||
${{ runner.os }}-
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
run: npm run build-beta
|
||||
env:
|
||||
SITE_URL: https://${{ steps.get_branch.outputs.branch }}.unicorn-utterances.com
|
||||
|
||||
- uses: jakejarvis/s3-sync-action@v0.5.1
|
||||
name: Sync files to DigitalOcean Spaces
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks --delete
|
||||
env:
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
AWS_S3_ENDPOINT: https://sfo2.digitaloceanspaces.com
|
||||
SOURCE_DIR: public
|
||||
DEST_DIR: ${{ steps.get_branch.outputs.branch }}
|
||||
|
||||
- name: Install doctl
|
||||
uses: digitalocean/action-doctl@v2
|
||||
with:
|
||||
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
|
||||
|
||||
- name: Flush DigitalOcean Spaces cache
|
||||
run: doctl compute cdn flush ${{ secrets.DIGITALOCEAN_CDN_ID }} --files ${{ steps.get_branch.outputs.branch }}/*
|
||||
|
||||
- name: Update deployment status
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
if: always()
|
||||
with:
|
||||
step: finish
|
||||
token: ${{ github.token }}
|
||||
status: ${{ job.status }}
|
||||
deployment_id: ${{ steps.deployment.outputs.deployment_id }}
|
||||
env_url: https://${{ steps.get_branch.outputs.branch }}.unicorn-utterances.com
|
||||
71
.github/workflows/deploy-prod.yml
vendored
Normal file
71
.github/workflows/deploy-prod.yml
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
name: deploy-prod
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI: true
|
||||
steps:
|
||||
- name: Create GitHub deployment
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
id: deployment
|
||||
with:
|
||||
step: start
|
||||
token: ${{ github.token }}
|
||||
env: production
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
|
||||
# From: https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#example-using-the-cache-action
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-node-modules
|
||||
with:
|
||||
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||
${{ runner.os }}-build-
|
||||
${{ runner.os }}-
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build
|
||||
run: npm run build
|
||||
|
||||
- uses: jakejarvis/s3-sync-action@v0.5.1
|
||||
name: Sync files to DigitalOcean Spaces
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks --delete
|
||||
env:
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
AWS_S3_ENDPOINT: https://sfo2.digitaloceanspaces.com
|
||||
SOURCE_DIR: public
|
||||
DEST_DIR: prod
|
||||
|
||||
- name: Install doctl
|
||||
uses: digitalocean/action-doctl@v2
|
||||
with:
|
||||
token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
|
||||
|
||||
- name: Flush DigitalOcean Spaces cache
|
||||
run: doctl compute cdn flush ${{ secrets.DIGITALOCEAN_CDN_ID }} --files prod/*
|
||||
|
||||
- name: Update deployment status
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
if: always()
|
||||
with:
|
||||
step: finish
|
||||
token: ${{ github.token }}
|
||||
status: ${{ job.status }}
|
||||
deployment_id: ${{ steps.deployment.outputs.deployment_id }}
|
||||
env_url: https://unicorn-utterances.com
|
||||
40
.github/workflows/destroy-dev.yml
vendored
Normal file
40
.github/workflows/destroy-dev.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: destroy-dev
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- closed
|
||||
|
||||
jobs:
|
||||
destroy:
|
||||
if: github.repository_owner === 'unicorn-utterances'
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CI: true
|
||||
steps:
|
||||
# see https://dev.to/bobheadxi/branch-previews-with-google-app-engine-and-github-actions-3pco
|
||||
- name: Extract branch name
|
||||
id: get_branch
|
||||
shell: bash
|
||||
env:
|
||||
PR_HEAD: ${{ github.head_ref }}
|
||||
run: echo "##[set-output name=branch;]$(echo ${PR_HEAD#refs/heads/} | tr / -)"
|
||||
|
||||
- name: Remove files from DigitalOcean Spaces
|
||||
uses: vitorsgomes/s3-rm-action@v1.0.1
|
||||
with:
|
||||
args: --recursive
|
||||
env:
|
||||
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
AWS_S3_ENDPOINT: https://sfo2.digitaloceanspaces.com
|
||||
PATH_TO_DELETE: "${{ steps.get_branch.outputs.branch }}"
|
||||
|
||||
- name: Mark environment as deactivated
|
||||
uses: bobheadxi/deployments@v0.4.3
|
||||
with:
|
||||
step: deactivate-env
|
||||
token: ${{ github.token }}
|
||||
env: ${{ steps.get_branch.outputs.branch }}
|
||||
desc: Deployment was pruned
|
||||
39
.github/workflows/test.yml
vendored
Normal file
39
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
name: test
|
||||
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
test-lint-build:
|
||||
env:
|
||||
CI: true
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '14'
|
||||
|
||||
# From: https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#example-using-the-cache-action
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-node-modules
|
||||
with:
|
||||
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-build-${{ env.cache-name }}-
|
||||
${{ runner.os }}-build-
|
||||
${{ runner.os }}-
|
||||
- name: Install Dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Test
|
||||
run: npm test
|
||||
|
||||
- name: Lint
|
||||
run: npm run lint
|
||||
|
||||
- name: Build
|
||||
run: npm run build
|
||||
42
.github/workflows/testing-deploying.yml
vendored
42
.github/workflows/testing-deploying.yml
vendored
@@ -1,42 +0,0 @@
|
||||
name: testing-deploying
|
||||
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
testing-deploying:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 14.x
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: '14'
|
||||
- name: Run npm install, test, and build
|
||||
run: |
|
||||
npm ci
|
||||
npm test
|
||||
npm run build
|
||||
env:
|
||||
CI: true
|
||||
- name: Deploy to beta.unicorn-utterances.com
|
||||
if: github.ref == 'refs/heads/integration'
|
||||
uses: AEnterprise/rsync-deploy@v1.0
|
||||
env:
|
||||
DEPLOY_KEY: ${{ secrets.JAILED_PRIVATE_KEY }}
|
||||
ARGS: "-rlt --delete --delete-delay --delay-updates"
|
||||
SERVER_PORT: 22
|
||||
FOLDER: "./public/"
|
||||
SERVER_IP: unicorn-utterances.com
|
||||
USERNAME: ${{ secrets.JAILED_USERNAME }}
|
||||
SERVER_DESTINATION: ${{ secrets.JAILED_BETA_PATH }}
|
||||
- name: Deploy to unicorn-utterances.com
|
||||
if: github.ref == 'refs/heads/master'
|
||||
uses: AEnterprise/rsync-deploy@v1.0
|
||||
env:
|
||||
DEPLOY_KEY: ${{ secrets.JAILED_PRIVATE_KEY }}
|
||||
ARGS: "-rlt --delete --delete-delay --delay-updates"
|
||||
SERVER_PORT: 22
|
||||
FOLDER: "./public/"
|
||||
SERVER_IP: unicorn-utterances.com
|
||||
USERNAME: ${{ secrets.JAILED_USERNAME }}
|
||||
SERVER_DESTINATION: ${{ secrets.JAILED_PROD_PATH }}
|
||||
@@ -6,8 +6,6 @@ As a site and community alike, we have a myriad of ways to contribute to the sit
|
||||
- [Markdown Post](#Markdown-Post)
|
||||
- [Editing a Blog Post](#Editing-a-Blog-Post)
|
||||
- [Code Contributions](#Code)
|
||||
- [Deployment](#Deployment)
|
||||
|
||||
|
||||
# Blog Posts
|
||||
|
||||
@@ -149,32 +147,6 @@ Keep in mind that we request developers reach out [via our Discord](https://disc
|
||||
|
||||
To start the development server, run `npm run develop`, it will then start the local instance at `http://localhost:8000`. You also can check out the GraphiQL tool at `http://localhost:8000/___graphql`. This is a tool you can use to experiment with querying your data. Learn more about using this tool in the [Gatsby tutorial](https://www.gatsbyjs.org/tutorial/part-five/#introducing-graphiql).
|
||||
|
||||
|
||||
## Debugging Plugins
|
||||
|
||||
We have a few local plugins for Gatsby. However, I've found that while debugging these plugins, Gatsby's cache can often get in the way. If you run `npm run debug`, it will create a debuggable ([using Chrome](https://unicorn-utterances.com/posts/debugging-nodejs-programs-using-chrome/)) instance of the Gatsby develop mode and clear the cache of Gatsby. This script will ensure that your debugger provides proper insight into what's happening in the build process.
|
||||
|
||||
# Deployment
|
||||
|
||||
## Git Strategy
|
||||
We loosely follow [the Gitflow branching strategy](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)
|
||||
where our development branch is called `integration`, and our mainline branch is called `master`.
|
||||
|
||||
This means that any new pull requests should be made against `integration`
|
||||
unless it is an emergency hotfix (to be approved by the DevOps team).
|
||||
|
||||
We also have the `master` branch, which is a live reflection of the code
|
||||
hosted on the server. Any time `integration` is pulled into `master`, the
|
||||
site will be deployed. A PR from `integration` to `master` should only be
|
||||
opened by a Unicorn Utterances team member and must be approved by at
|
||||
least one DevOps member
|
||||
|
||||
## CI/CD
|
||||
|
||||
As mentioned before, we follow the GitFlow branching strategy. What we didn't say before is how we utilize those branches to deploy our code. Upon a PR being merged into `integration`, we have [a GitHub Action to deploy](https://github.com/unicorn-utterances/unicorn-utterances/actions?query=workflow%3Atesting-deploying) those changes to our beta link:
|
||||
|
||||
[https://beta.unicorn-utterances.com](https://beta.unicorn-utterances.com)
|
||||
|
||||
Likewise, we make periodic PRs to the `master` branch. We call these PR's `Integration merge MM/DD/YY`. These PRs **must** be approved by one or more of the members of the DevOps team before being able to be merged. Upon merging, there will be an automated deployment ([using the same GitHub action](https://github.com/unicorn-utterances/unicorn-utterances/actions?query=workflow%3Atesting-deploying)) to our homepage:
|
||||
|
||||
[https://unicorn-utterances.com](https://unicorn-utterances.com)
|
||||
@@ -3,11 +3,20 @@ const { SeriesToC } = require("./src/components/series-toc");
|
||||
let CONSTS = require("./config/gatsby-config-consts");
|
||||
if (!CONSTS) CONSTS = {};
|
||||
|
||||
const buildMode = process.env.BUILD_ENV || "production";
|
||||
const siteUrl =
|
||||
process.env.SITE_URL ||
|
||||
(buildMode === "production"
|
||||
? "https://unicorn-utterances.com"
|
||||
: "https://beta.unicorn-utterances.com");
|
||||
|
||||
console.log(`Building for ${buildMode} at ${siteUrl}`);
|
||||
|
||||
module.exports = {
|
||||
siteMetadata: {
|
||||
title: `Unicorn Utterances`,
|
||||
description: `Learning programming from magically majestic words. A place to learn about all sorts of programming topics from entry-level concepts to advanced abstractions`,
|
||||
siteUrl: `https://unicorn-utterances.com/`,
|
||||
siteUrl,
|
||||
disqusShortname: "unicorn-utterances",
|
||||
repoPath: "unicorn-utterances/unicorn-utterances",
|
||||
relativeToPosts: "/content/blog",
|
||||
@@ -65,7 +74,7 @@ module.exports = {
|
||||
options: {
|
||||
maxWidth: 590,
|
||||
linkImagesToOriginal: false,
|
||||
backgroundColor: 'transparent'
|
||||
backgroundColor: `transparent`
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -340,11 +349,11 @@ module.exports = {
|
||||
{
|
||||
resolve: "gatsby-plugin-robots-txt",
|
||||
options: {
|
||||
resolveEnv: () => process.env.GITHUB_REF,
|
||||
resolveEnv: () => buildMode,
|
||||
env: {
|
||||
"refs/heads/integration": {
|
||||
host: "https://beta.unicorn-utterances.com/sitemap.xml",
|
||||
sitemap: "https://beta.unicorn-utterances.com/sitemap.xml",
|
||||
development: {
|
||||
host: siteUrl,
|
||||
sitemap: `${siteUrl}/sitemap.xml`,
|
||||
policy: [
|
||||
{
|
||||
userAgent: "*",
|
||||
@@ -352,9 +361,9 @@ module.exports = {
|
||||
}
|
||||
]
|
||||
},
|
||||
"refs/heads/master": {
|
||||
host: "https://unicorn-utterances.com/sitemap.xml",
|
||||
sitemap: `https://unicorn-utterances.com/sitemap.xml`,
|
||||
production: {
|
||||
host: siteUrl,
|
||||
sitemap: `${siteUrl}/sitemap.xml`,
|
||||
policy: [
|
||||
{
|
||||
userAgent: "*",
|
||||
@@ -364,7 +373,7 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
],
|
||||
mapping: {
|
||||
"MarkdownRemark.frontmatter.authors": `UnicornsJson`,
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"build": "gatsby build",
|
||||
"build-beta": "BUILD_ENV=development npm run build",
|
||||
"debug": "gatsby clean && node --nolazy --inspect-brk --max-old-space-size=2000 ./node_modules/gatsby/dist/bin/gatsby.js develop",
|
||||
"develop": "gatsby develop",
|
||||
"format": "run-s format:**",
|
||||
|
||||
Reference in New Issue
Block a user