Skip to content
Merged
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
58 changes: 58 additions & 0 deletions .github/workflows/build-and-deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Build and Deploy

on:
push:
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

jobs:
build:
name: Build and Deploy Site
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 23

- name: Restore cache
uses: actions/cache@v4
with:
path: |
node_modules
.image-cache
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-

- name: Build with Node
run: |
npm ci
npx @11ty/eleventy

- name: Deploy to Neocities
uses: bcomnes/deploy-to-neocities@v2
with:
api_token: ${{ secrets.NEOCITIES_API_KEY }}
cleanup: true
dist_dir: _site

- name: Deploy to Bunny
uses: R-J-dev/bunny-deploy@v2.0.6
with:
access-key: ${{ secrets.BUNNY_ACCESS_KEY }}
directory-to-upload: _site
storage-endpoint: "https://storage.bunnycdn.com"
storage-zone-name: "buttonkin"
storage-zone-password: ${{ secrets.BUNNY_STORAGE_ZONE_PASSWORD }}
concurrency: "5"
enable-delete-action: true
enable-purge-pull-zone: true
pull-zone-id: "4605820"
replication-timeout: "15000"
5 changes: 0 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,6 @@ dist
.yarn/install-state.gz
.pnp.*

# ---> Nix
# Ignore build outputs from performing a nix-build or `nix build` command
result
result-*

# ---> Eleventy
# Built site
_site
Expand Down
4 changes: 0 additions & 4 deletions bin/build

This file was deleted.

2 changes: 0 additions & 2 deletions bin/dryrun

This file was deleted.

9 changes: 0 additions & 9 deletions bin/lint

This file was deleted.

59 changes: 0 additions & 59 deletions bin/screenshot

This file was deleted.

4 changes: 0 additions & 4 deletions bin/serve

This file was deleted.

14 changes: 0 additions & 14 deletions default.nix

This file was deleted.

126 changes: 3 additions & 123 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,147 +10,27 @@
forAllSystems = nixpkgs.lib.genAttrs systems;
in
{
packages = forAllSystems (
system:
let
pkgs = import nixpkgs { system = system; };
dependencies = with pkgs; [ nodejs_23 ];
nodeModules = pkgs.buildNpmPackage {
pname = "buttonkin-dependencies";
version = "1.0.0";
src = pkgs.runCommand "source" { } ''
mkdir -p $out
cp ${./package.json} $out/package.json
cp ${./package-lock.json} $out/package-lock.json
'';
npmDepsHash = "sha256-FGMvzbHIkV/oOdqD7X3ULn0Vdi+1Exmxw+nmE5kTc6s=";
installPhase = "mkdir -p $out && cp -r node_modules $out/";
dontNpmBuild = true;
};

makeScript =
name:
let
baseScript = pkgs.writeScriptBin name (builtins.readFile ./bin/${name});
patchedScript = baseScript.overrideAttrs (old: {
buildCommand = "${old.buildCommand}\n patchShebangs $out";
});
in
pkgs.symlinkJoin {
name = name;
paths = [ patchedScript ] ++ dependencies;
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/${name} --prefix PATH : $out/bin
'';
};

scriptNames = builtins.attrNames (builtins.readDir ./bin);
scriptPackages = nixpkgs.lib.genAttrs scriptNames makeScript;

sitePackage = pkgs.stdenv.mkDerivation {
name = "buttonkin";
src = ./.;
buildInputs = dependencies ++ [ nodeModules ];

buildPhase = ''
mkdir -p $TMPDIR/build_dir
cd $TMPDIR/build_dir

cp -r $src/* .
cp -r $src/.image-cache .
chmod -R a+rwX .image-cache
cp $src/.eleventy.js .

ln -s ${nodeModules}/node_modules node_modules

mkdir -p src/_data
chmod -R +w src/_data

${scriptPackages.build}/bin/build
'';

installPhase = ''
mkdir -p $out
mv $TMPDIR/build_dir/_site $out/
mv $TMPDIR/build_dir/.image-cache $out/
'';

dontFixup = true;
};

allPackages = {
site = sitePackage;
nodeModules = nodeModules;
} // scriptPackages;
in
allPackages
);

defaultPackage = forAllSystems (system: self.packages.${system}.site);

devShells = forAllSystems (
system:
let
pkgs = import nixpkgs { system = system; };

dependencies = with pkgs; [
biome
nodejs_23
];

nodeModules = pkgs.buildNpmPackage {
pname = "buttonkin-dependencies";
version = "1.0.0";
src = pkgs.runCommand "source" { } ''
mkdir -p $out
cp ${./package.json} $out/package.json
cp ${./package-lock.json} $out/package-lock.json
'';
npmDepsHash = "sha256-FGMvzbHIkV/oOdqD7X3ULn0Vdi+1Exmxw+nmE5kTc6s=";
installPhase = "mkdir -p $out && cp -r node_modules $out/";
dontNpmBuild = true;
};

makeScript =
name:
let
baseScript = pkgs.writeScriptBin name (builtins.readFile ./bin/${name});
patchedScript = baseScript.overrideAttrs (old: {
buildCommand = "${old.buildCommand}\n patchShebangs $out";
});
in
pkgs.symlinkJoin {
name = name;
paths = [ patchedScript ] ++ dependencies;
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/${name} --prefix PATH : $out/bin
'';
};

scriptNames = builtins.attrNames (builtins.readDir ./bin);
scriptPackages = nixpkgs.lib.genAttrs scriptNames makeScript;

scriptPackageList = builtins.attrValues scriptPackages;
in
{
default = pkgs.mkShell {
buildInputs = dependencies ++ scriptPackageList;
buildInputs = dependencies;

shellHook = ''
rm -rf node_modules
ln -s ${nodeModules}/node_modules node_modules
cat <<EOF

Development environment ready!

Available commands:
- 'serve' - Start development server
- 'build' - Build the site in the _site directory
- 'dryrun' - Perform a dry run build
- 'test_flake' - Test building a site using flake.nix
- 'lint' - Lint all files in src using Biome
- 'npm run serve' # Start development server
- 'npm run build' # Build the site in the _site directory

EOF

Expand Down
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"name": "buttonkin",
"version": "1.0.0",
"type": "commonjs",
"scripts": {
"build": "eleventy",
"serve": "eleventy --serve"
},
"dependencies": {
"@11ty/eleventy": "^3.0.0",
"@11ty/eleventy-img": "^6.0.0",
Expand Down