From 6cb7c3fe1fc57825fdb294e932e67b794669c3d4 Mon Sep 17 00:00:00 2001 From: pfych Date: Fri, 22 May 2026 15:49:17 +1000 Subject: [PATCH] Silly experiment --- .gitea/workflows/build-container.yml | 38 -------------------- .gitea/workflows/deploy.yml | 49 ++++++++++++++++---------- Dockerfile | 47 ------------------------- flake.lock | 24 +++++++++++++ flake.nix | 31 +++++++++++++++++ justfile | 32 +++++++++++++++++ package.json | 2 +- pnpm-workspace.yaml | 8 ++--- scripts/setup-aws.sh | 52 ---------------------------- 9 files changed, 122 insertions(+), 161 deletions(-) delete mode 100644 .gitea/workflows/build-container.yml delete mode 100644 Dockerfile create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 justfile delete mode 100755 scripts/setup-aws.sh diff --git a/.gitea/workflows/build-container.yml b/.gitea/workflows/build-container.yml deleted file mode 100644 index 202171c..0000000 --- a/.gitea/workflows/build-container.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Build and Push Container -on: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: git.pfy.ch/pfych/staticsiteci - tags: | - type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'master') }},priority=1000 - type=sha,priority=100 - - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Registry - uses: docker/login-action@v3 - with: - registry: git.pfy.ch - username: ${{ secrets.REGISTRY_USERNAME }} - password: ${{ secrets.REGISTRY_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e24c9e6..27663b2 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -2,44 +2,57 @@ name: Deploy on: push: - branches: [master] + branches: [ master ] workflow_dispatch: env: + WISP_APP_PASSWORD: ${{ secrets.WISP_APP_PASSWORD }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_PROFILE: 'dev' AWS_REGION: 'ap-southeast-2' - WISP_APP_PASSWORD: ${{ secrets.WISP_APP_PASSWORD }} + +defaults: + run: + shell: nix develop --command bash -e {0} jobs: deploy: runs-on: ubuntu-latest - container: git.pfy.ch/pfych/staticsiteci:sha-ffbc89b steps: - uses: actions/checkout@v3 with: fetch-depth: 0 submodules: true - - name: Install Dependencies - run: pnpm install && npm install -g aws-cdk@2.1031.1 + - name: Restore Nix store cache + uses: https://github.com/nix-community/cache-nix-action@v6 + with: + primary-key: nix-${{ runner.os }}-${{ hashFiles('flake.nix', 'flake.lock') }} + restore-prefixes-first-match: nix-${{ runner.os }}- + gc-max-store-size-linux: 5G + purge: true + purge-prefixes: nix-${{ runner.os }}- + purge-created: 0 + purge-primary-key: never + + - name: Install Nix + uses: https://github.com/DeterminateSystems/nix-installer-action@main + + - name: Warm dev shell + run: 'true' + + - name: Configure AWS profile + run: just _ci-aws - - name: Setup AWS - run: ./scripts/setup-aws.sh + - name: Install dependencies + run: just install - name: Deploy API - run: pnpm run api:deploy + run: just deploy-api - - name: Deploy to AWS - run: pnpm run site:deploy + - name: Deploy site + run: just deploy-site - name: Deploy to Wisp - run: | - pnpm run site:build - curl https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-linux -o wisp-cli - chmod +x wisp-cli - ./wisp-cli deploy pfy.ch \ - --path .dist \ - --site pfych \ - --password "$WISP_APP_PASSWORD" + run: just deploy-wisp \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 844534c..0000000 --- a/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM ubuntu:latest - -# Update package list and install dependencies -RUN apt-get update && apt-get install -y \ - pandoc \ - libgtk2.0-0t64 \ - libgtk-3-0t64 \ - libgbm-dev \ - libnotify-dev \ - libnss3 \ - libxss1 \ - libasound2t64 \ - libxtst6 \ - xauth \ - xvfb \ - curl \ - wget \ - gnupg \ - git \ - unzip \ - jq \ - && rm -rf /var/lib/apt/lists/* - -# Install Node.js 24.7.0 -RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \ - && apt-get install -y nodejs=24.7.0-1nodesource1 - -# Install pnpm 10.15.0 -RUN npm install -g pnpm@10.15.0 - -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \ - && unzip -qq awscliv2.zip \ - && ./aws/install -i /usr/local/aws-cli -b /usr/local/bin \ - && rm -rf awscliv2.zip aws/ - -# Install Chrome -RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ - && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \ - && apt-get update \ - && apt-get install -y google-chrome-stable \ - && rm -rf /var/lib/apt/lists/* - -# Set display for headless Chrome -ENV DISPLAY=:99 - -WORKDIR /workspace diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7642c41 --- /dev/null +++ b/flake.lock @@ -0,0 +1,24 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1779351318, + "narHash": "sha256-uY1HXtHXk0Iyc46ZLcMbFni73h0m9cO/Je/krbOF6CI=", + "rev": "4a29d733e8a7d5b824c3d8c958a946a9867b3eb2", + "type": "tarball", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre1002810.4a29d733e8a7/nixexprs.tar.xz?lastModified=1779351318&rev=4a29d733e8a7d5b824c3d8c958a946a9867b3eb2" + }, + "original": { + "type": "tarball", + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..86e2d60 --- /dev/null +++ b/flake.nix @@ -0,0 +1,31 @@ +{ + inputs = { + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; + }; + + outputs = + { nixpkgs, ... }: + let + forAllSystems = + f: + nixpkgs.lib.genAttrs [ + "x86_64-linux" + "aarch64-darwin" + ] (s: f nixpkgs.legacyPackages.${s}); + in + { + devShells = forAllSystems (pkgs: { + default = pkgs.mkShell { + packages = with pkgs; [ + nodejs_24 + pnpm + aws-cdk-cli + awscli2 + just + jq + curl + ]; + }; + }); + }; +} diff --git a/justfile b/justfile new file mode 100644 index 0000000..d3579d1 --- /dev/null +++ b/justfile @@ -0,0 +1,32 @@ +default: + @just --list + +install: + pnpm install + +dev-site: + pnpm run site:dev + +dev-api: + pnpm run api:dev + +build: + pnpm run site:build + +deploy-api: + pnpm run api:deploy + +deploy-site: + pnpm run site:deploy + +deploy-wisp: build + curl -sSL https://sites.wisp.place/nekomimi.pet/wisp-cli-binaries/wisp-cli-x86_64-linux -o wisp-cli + chmod +x wisp-cli + ./wisp-cli deploy pfy.ch --path .dist --site pfych --password "$WISP_APP_PASSWORD" + +deploy: install deploy-api deploy-site deploy-wisp + +_ci-aws: + aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID" --profile dev + aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY" --profile dev + aws configure set region "$AWS_REGION" --profile dev \ No newline at end of file diff --git a/package.json b/package.json index e006b9e..ae6cd1f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "engines": { "node": ">=24.7.0", - "pnpm": ">=10.15.0" + "pnpm": ">=11.0.0" }, "scripts": { "site:dev": "pnpm --filter web-site run dev", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8f4c97e..2d58344 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,8 +2,6 @@ packages: - packages/* - infrastructure -ignoredBuiltDependencies: - - esbuild - -onlyBuiltDependencies: - - '@parcel/watcher' +allowBuilds: + '@parcel/watcher': true + esbuild: true diff --git a/scripts/setup-aws.sh b/scripts/setup-aws.sh deleted file mode 100755 index d1170ae..0000000 --- a/scripts/setup-aws.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -shopt -s failglob -set -eu -o pipefail - -echo "Begin: Setup AWS" - -echo "Exporting env vars" -export AWS_PROFILE="${AWS_PROFILE:-"dev"}" -echo "Profile: [$AWS_PROFILE]" - -export AWS_REGION="${AWS_REGION:-"ap-southeast-2"}" -echo "Region: [$AWS_REGION]" - -export AWS_HOME="/usr/local/bin/aws" -export PATH="${AWS_HOME:-}:$PATH" - -if [ "$AWS_ACCESS_KEY_ID" == "" ] || [ "$AWS_SECRET_ACCESS_KEY" == "" ]; then - # These can be used if master and prod are in different accounts or the IAM roles have different access - if [ "$BITBUCKET_BRANCH" == "prod" ]; then - export AWS_ACCESS_KEY_ID="${PROD_AWS_ACCOUNT_ACCESS_KEY_ID}" - export AWS_SECRET_ACCESS_KEY="${PROD_AWS_ACCOUNT_SECRET_ACCESS_KEY}" - else - export AWS_ACCESS_KEY_ID="${NON_AWS_ACCOUNT_ACCESS_KEY_ID}" - export AWS_SECRET_ACCESS_KEY="${NON_AWS_ACCOUNT_SECRET_ACCESS_KEY}" - fi -fi - -if [ "$AWS_ACCESS_KEY_ID" == "" ] || [ "$AWS_SECRET_ACCESS_KEY" == "" ]; then - echo "Warning: No AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY provided." - echo "You will not be able to deploy some of the AWS components of the environment." -fi - -aws --version -aws configure set cli_follow_urlparam false -aws configure set region "${AWS_REGION:-}" - -if ! aws configure list-profiles | grep -cq "${AWS_PROFILE}" ; then - echo "[profile $AWS_PROFILE]" >>~/.aws/config - echo "region=${AWS_REGION:-}" >>~/.aws/config -else - echo "Profile exists" -fi - -# by setting AWS_PROFILE, the following functions relate to it -aws configure set aws_access_key_id "${AWS_ACCESS_KEY_ID:-}" -aws configure set aws_secret_access_key "${AWS_SECRET_ACCESS_KEY:-}" - -echo "Current user:" -aws iam get-user - -echo "Finish: Setup AWS" -- 2.54.0