Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/docker image #473

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
.cargo
.github
.vscode
aws
dist
node_modules
src-tauri
Dockerfile
.dockerignore
.git
.gitignore
12 changes: 12 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,15 @@ jobs:
cargo fmt --all -- --check
cargo clippy -- -D warnings
cd ..

validate_dockerfile:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Build Dockerfile
run: |
docker build .

271 changes: 147 additions & 124 deletions .github/workflows/push-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,127 +9,150 @@ env:
CALLBACK_URL_BETA: "https://beta.surrealist.app/cloud/callback"

jobs:
version:
name: Extract version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.extract_version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Extract version
id: extract_version
uses: Saionaro/[email protected]

publish:
name: Publish
needs:
- version

runs-on: 'ubuntu-latest'
steps:
- name: Information
run: echo "Building Surrealist Web version ${{ needs.version.outputs.version }}"

- name: Code checkout
uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install frontend dependencies
run: pnpm i --frozen-lockfile

- name: Generate license report
run: pnpm license-report

- name: Set version
run: pnpm pkg set version=${{ needs.version.outputs.version }}

- name: Configure variables
run: |
if [ "${{ github.event.release.prerelease }}" == "true" ]; then
echo "CALLBACK_URL=${{ env.CALLBACK_URL_BETA }}" >> $GITHUB_ENV
else
echo "CALLBACK_URL=${{ env.CALLBACK_URL_STABLE }}" >> $GITHUB_ENV
fi

- name: Debug environment
run: |
echo "Update URL: ${{ env.UPDATE_URL }}"
echo "Callback URL: ${{ env.CALLBACK_URL }}"

- name: Build Website
run: pnpm build
env:
VITE_SURREALIST_PREVIEW: "${{ github.event.release.prerelease }}"
VITE_CLOUD_CLIENT_ID: "OuFa4OeeKveeRq1G6xIPgrl6EBUJtxLR"
VITE_CLOUD_CALLBACK_URL: "${{ env.CALLBACK_URL }}"

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
aws-access-key-id: ${{ secrets.AMAZON_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AMAZON_SECRET_KEY }}

- name: Download release assets
uses: robinraju/[email protected]
with:
releaseId: ${{ github.event.release.id }}
out-file-path: release-assets
token: ${{ secrets.GITHUB_TOKEN }}

- name: Publish to Beta
run: |
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --exclude ".DS_Store" --exclude "*.wasm" ./dist/assets s3://beta.surrealist.app/assets/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --content-encoding gzip --exclude "*" --include "*.wasm" ./dist/assets s3://beta.surrealist.app/assets/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=86400" ./dist/favicon.ico s3://beta.surrealist.app/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=30" --exact-timestamps --delete --exclude "*" --include "*.html" ./dist/ s3://beta.surrealist.app/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=0" ./release-assets/latest.json s3://beta.surrealist.app/

- name: Publish to Production
if: ${{ !github.event.release.prerelease }}
run: |
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --exclude ".DS_Store" --exclude "*.wasm" ./dist/assets s3://www.surrealist.app/assets/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --content-encoding gzip --exclude "*" --include "*.wasm" ./dist/assets s3://www.surrealist.app/assets/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=86400" ./dist/favicon.ico s3://www.surrealist.app/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=30" --exact-timestamps --delete --exclude "*" --include "*.html" ./dist/ s3://www.surrealist.app/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=0" ./release-assets/latest.json s3://www.surrealist.app/

distribute:
name: Distribute Production
if: ${{ !github.event.release.prerelease }}
needs: publish
runs-on: ubuntu-latest
strategy:
matrix:
region: [af-south-1, ap-east-1, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, eu-central-1, eu-west-2, me-south-1, sa-east-1, us-west-2]
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-2
aws-access-key-id: ${{ secrets.AMAZON_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AMAZON_SECRET_KEY }}
- name: Distribute across regions
run: aws s3 sync --delete --exact-timestamp --source-region eu-west-2 --region ${{ matrix.region }} s3://www.surrealist.app s3://www.${{ matrix.region }}.surrealist.app
version:
name: Extract version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.extract_version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Extract version
id: extract_version
uses: Saionaro/[email protected]

push_docker_image:
name: Push Docker image to Docker Hub
if: ${{ !github.event.release.prerelease }}
runs-on: ubuntu-latest
needs:
- version
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: |
surrealdb/surrealist:latest
surrealdb/surrealist:${{ needs.version.outputs.version }}

publish:
name: Publish
needs:
- version
runs-on: 'ubuntu-latest'
steps:
- name: Information
run: echo "Building Surrealist Web version ${{ needs.version.outputs.version }}"

- name: Code checkout
uses: actions/checkout@v4

- name: Setup PNPM
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install frontend dependencies
run: pnpm i --frozen-lockfile

- name: Generate license report
run: pnpm license-report

- name: Set version
run: pnpm pkg set version=${{ needs.version.outputs.version }}

- name: Configure variables
run: |
if [ "${{ github.event.release.prerelease }}" == "true" ]; then
echo "CALLBACK_URL=${{ env.CALLBACK_URL_BETA }}" >> $GITHUB_ENV
else
echo "CALLBACK_URL=${{ env.CALLBACK_URL_STABLE }}" >> $GITHUB_ENV
fi

- name: Debug environment
run: |
echo "Update URL: ${{ env.UPDATE_URL }}"
echo "Callback URL: ${{ env.CALLBACK_URL }}"

- name: Build Website
run: pnpm build
env:
VITE_SURREALIST_PREVIEW: "${{ github.event.release.prerelease }}"
VITE_CLOUD_CLIENT_ID: "OuFa4OeeKveeRq1G6xIPgrl6EBUJtxLR"
VITE_CLOUD_CALLBACK_URL: "${{ env.CALLBACK_URL }}"

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-west-2
aws-access-key-id: ${{ secrets.AMAZON_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AMAZON_SECRET_KEY }}

- name: Download release assets
uses: robinraju/[email protected]
with:
releaseId: ${{ github.event.release.id }}
out-file-path: release-assets
token: ${{ secrets.GITHUB_TOKEN }}

- name: Publish to Beta
run: |
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --exclude ".DS_Store" --exclude "*.wasm" ./dist/assets s3://beta.surrealist.app/assets/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --content-encoding gzip --exclude "*" --include "*.wasm" ./dist/assets s3://beta.surrealist.app/assets/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=86400" ./dist/favicon.ico s3://beta.surrealist.app/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=30" --exact-timestamps --delete --exclude "*" --include "*.html" ./dist/ s3://beta.surrealist.app/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=0" ./release-assets/latest.json s3://beta.surrealist.app/

- name: Publish to Production
if: ${{ !github.event.release.prerelease }}
run: |
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --exclude ".DS_Store" --exclude "*.wasm" ./dist/assets s3://www.surrealist.app/assets/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=31536000, immutable" --content-encoding gzip --exclude "*" --include "*.wasm" ./dist/assets s3://www.surrealist.app/assets/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=86400" ./dist/favicon.ico s3://www.surrealist.app/
aws s3 sync --region eu-west-2 --cache-control "public, max-age=30" --exact-timestamps --delete --exclude "*" --include "*.html" ./dist/ s3://www.surrealist.app/
aws s3 cp --region eu-west-2 --cache-control "public, max-age=0" ./release-assets/latest.json s3://www.surrealist.app/

distribute:
name: Distribute Production
if: ${{ !github.event.release.prerelease }}
needs: publish
runs-on: ubuntu-latest
strategy:
matrix:
region: [af-south-1, ap-east-1, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, eu-central-1, eu-west-2, me-south-1, sa-east-1, us-west-2]
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: us-east-2
aws-access-key-id: ${{ secrets.AMAZON_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AMAZON_SECRET_KEY }}
- name: Distribute across regions
run: aws s3 sync --delete --exact-timestamp --source-region eu-west-2 --region ${{ matrix.region }} s3://www.surrealist.app s3://www.${{ matrix.region }}.surrealist.app
31 changes: 31 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# build app with node
FROM node:latest as builder

RUN npm i -g pnpm

WORKDIR /app

COPY package.json .
COPY patches patches
COPY pnpm-lock.yaml .

RUN pnpm install

COPY . .
RUN npm run build:embedded

# set up production image (static assets served by nginx)
FROM nginx:stable-alpine

WORKDIR /usr/share/nginx/

RUN rm -rf html
RUN mkdir html

WORKDIR /

COPY --from=builder /app/dist /usr/share/nginx/html
COPY ./nginx/nginx.conf /etc/nginx

EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
Loading
Loading