15 Commits
Author SHA1 Message Date
Paul Brinkmeier dbc3103980 Don't use /tmp...
deliver / deliver (push) Successful in 1m48s
2025-10-07 17:07:12 +02:00
Paul Brinkmeier 2dacd4f747 Use /tmp for running dbmate
deliver / deliver (push) Successful in 2m6s
2025-10-07 16:48:53 +02:00
paul 94ede9a168 Use SIGINT as container StopSignal
deliver / deliver (push) Failing after 20s
2025-10-07 13:47:12 +02:00
Paul Brinkmeier c38574e005 Add exec in entrypoint
deliver / deliver (push) Successful in 1m40s
2025-10-07 13:26:46 +02:00
Paul Brinkmeier 700d53fbb0 Update todo list 2025-10-07 13:09:24 +02:00
Paul Brinkmeier c5c11ed181 Don't buffer stdout
deliver / deliver (push) Successful in 1m36s
2025-10-07 12:53:14 +02:00
paul 36c9b880a7 Merge pull request 'Add entrypoint script and cacerts to image' (#2) from image-entry into main
Reviewed-on: #2
2025-10-07 12:50:53 +02:00
paul c25ead672b Add entrypoint script and cacerts to image
deliver / deliver (push) Successful in 2m0s
build / build (pull_request) Successful in 16s
2025-10-07 12:43:48 +02:00
Paul Brinkmeier 4a6e3b2454 Reformat image flake output 2025-10-07 10:28:30 +02:00
paul b739294638 Merge pull request 'CI' (#1) from ci into main
Reviewed-on: #1
2025-10-07 01:17:42 +02:00
Paul Brinkmeier 27f5b8e23c Fix reading image tag
build / build (pull_request) Successful in 1m14s
deliver / deliver (push) Successful in 37s
2025-10-07 01:11:18 +02:00
Paul Brinkmeier 48eb27e218 Add docker image CI workflow
build / build (pull_request) Successful in 1m17s
deliver / deliver (push) Failing after 48s
2025-10-07 01:07:22 +02:00
Paul Brinkmeier 94554ad6e4 Bump opium
build / build (pull_request) Successful in 2m29s
2025-10-07 00:49:51 +02:00
Paul Brinkmeier 1ccde9e5fc Add Gitea Actions config
build / build (pull_request) Successful in 5m40s
2025-10-07 00:26:30 +02:00
Paul Brinkmeier 999c9e8c9e Ignore .gitea in flake.nix 2025-10-07 00:20:34 +02:00
7 changed files with 134 additions and 21 deletions
+27
View File
@@ -0,0 +1,27 @@
name: build
on:
pull_request:
jobs:
build:
container:
image: node:24-bookworm
env:
USER: node
HOME: /home/node
NIX_CONFIG: experimental-features = nix-command flakes
volumes:
- /var/lib/pbri/docker/nix_runner_nix:/nix
- /var/lib/pbri/docker/nix_runner_etc:/etc/nix
- /var/lib/pbri/docker/nix_runner_home_node:/home/node
options: --user 1000:1000
steps:
- name: Prep nix env
run: |
if [ ! -f ~/.nix-profile/etc/profile.d/nix.sh ]; then
curl -L https://nixos.org/nix/install | bash -s -- --no-daemon
fi
. ~/.nix-profile/etc/profile.d/nix.sh
env >> "$GITHUB_ENV"
- name: Checkout repo
uses: actions/checkout@v4
- run: nix build --log-format raw --print-build-logs .#yore
+40
View File
@@ -0,0 +1,40 @@
name: deliver
on:
push:
tags:
- 'v*'
jobs:
deliver:
container:
image: node:24-bookworm
env:
USER: node
HOME: /home/node
NIX_CONFIG: experimental-features = nix-command flakes
volumes:
- /var/lib/pbri/docker/nix_runner_nix:/nix
- /var/lib/pbri/docker/nix_runner_etc:/etc/nix
- /var/lib/pbri/docker/nix_runner_home_node:/home/node
options: --user 1000:1000
steps:
- name: Prep nix env
run: |
if [ ! -f ~/.nix-profile/etc/profile.d/nix.sh ]; then
curl -L https://nixos.org/nix/install | bash -s -- --no-daemon
fi
. ~/.nix-profile/etc/profile.d/nix.sh
env >> "$GITHUB_ENV"
- name: Checkout repo
uses: actions/checkout@v4
- name: Get image meta
run: nix build .#yore-meta -o /tmp/yore-meta
- name: Version check
run: |
VERSION=$(cat /tmp/yore-meta/version)
[ "$GITHUB_REF_NAME" = v"$VERSION" ]
- run: nix build --log-format raw --print-build-logs .#image -o image.tar.gz
- run: gunzip -c image.tar.gz > image.tar
- run: nix run .#crane -- auth login git.pbrinkmeier.de -u paul -p "$PASSWORD"
env:
PASSWORD: "${{ secrets.REGISTRY_PASSWORD }}"
- run: nix run .#crane -- push image.tar $(cat /tmp/yore-meta/image-tag)
+8 -6
View File
@@ -25,7 +25,7 @@ You can also use it to run a database for development by choosing a `$COMMAND` t
``` ```
BASE_DIR=./pgdata scripts/with-db psql "dbname=yore-test port=5433 user=yore-test" BASE_DIR=./pgdata scripts/with-db psql "dbname=yore-test port=5433 user=yore-test"
# cabal repl with env vars set # cabal repl with env vars set
BASE_DIR=./pgdata scripts/with-db scripts/dev BASE_DIR=./pgdata scripts/with-db cabal run
``` ```
By setting `$BASE_DIR` you can persist the database for later runs. By setting `$BASE_DIR` you can persist the database for later runs.
@@ -41,8 +41,10 @@ By setting `$BASE_DIR` you can persist the database for later runs.
## TODO ## TODO
- CI - [x] CI
- Docker container (in flake) - [x] Docker container (in flake)
- try fourmolu - [x] try fourmolu
- Test leap second handling in the `time` package - [x] Test leap second handling in the `time` package
- use queue to sync logging of indexer and main thread - [ ] Fix container shutdown delay
- [ ] Fix `responseFile` always returning 200
- [ ] use queue to sync logging of indexer and main thread
+3
View File
@@ -65,6 +65,7 @@ import Data.Time.Clock.POSIX (getPOSIXTime)
import qualified Envy import qualified Envy
import qualified Yore.DB as DB import qualified Yore.DB as DB
import qualified Yore.Log as Log import qualified Yore.Log as Log
import System.IO (hSetBuffering, BufferMode (..), stdout)
data ConfigT f = Config data ConfigT f = Config
{ yorePort :: f =@@ Int ? 3000 { yorePort :: f =@@ Int ? 3000
@@ -79,6 +80,8 @@ deriving instance Show Config
main :: IO () main :: IO ()
main = do main = do
hSetBuffering stdout NoBuffering
cfg <- cfg <-
Envy.load @ConfigT >>= \case Envy.load @ConfigT >>= \case
Left errs -> do Left errs -> do
Generated
+4 -4
View File
@@ -64,11 +64,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756064767, "lastModified": 1759790870,
"narHash": "sha256-SaJK9VYc/oF5aBSMSW+We8TggER4+uTAHvc2ztnLpYo=", "narHash": "sha256-rEsaO38v2wvAThPzgbYPgnv29mu6GxTYLjgci3GYaO4=",
"ref": "main", "ref": "main",
"rev": "af16429d827816cf9bec69026e13f50acc3d2691", "rev": "4db509c1b52ee7b5012abfef5e11e62beab27a16",
"revCount": 65, "revCount": 66,
"type": "git", "type": "git",
"url": "https://git.pbrinkmeier.de/paul/opium" "url": "https://git.pbrinkmeier.de/paul/opium"
}, },
+51 -10
View File
@@ -26,11 +26,18 @@
}; };
# For building the package, we use only the files not ignored by Git as inputs. # For building the package, we use only the files not ignored by Git as inputs.
# Also, flake.nix and flake.lock are not included to avoid rebuilds when # Also, flake.nix, flake.lock and .gitea are not included to avoid rebuilds when
# working on them. # working on them.
src = pkgs.lib.cleanSourceWith { src = pkgs.lib.cleanSourceWith {
src = gitignore.lib.gitignoreSource ./.; src = ./.;
filter = path: type: builtins.elem (builtins.baseNameOf path) [ "flake.nix" "flake.lock" ]; filter = gitignore.lib.gitignoreFilterWith {
basePath = ./.;
extraRules = ''
flake.nix
flake.lock
.gitea
'';
};
}; };
yore = pkgs.lib.pipe yore = pkgs.lib.pipe
@@ -51,16 +58,44 @@
# Return only the bin folder to curb image size # Return only the bin folder to curb image size
compose.justStaticExecutables compose.justStaticExecutables
]; ];
image =
pkgs.dockerTools.buildImage {
name = "git.pbrinkmeier.de/paul/yore";
tag = yore.version;
copyToRoot = [ pkgs.cacert ];
config = {
Cmd = [ "${entrypoint}/bin/run" ];
StopSignal = "SIGINT";
};
};
entrypoint = pkgs.writeShellApplication {
name = "run";
runtimeInputs = [ pkgs.coreutils pkgs.dbmate yore ];
text = ''
set -Eeuo pipefail
mkdir -p "''${YORE_DBMATE_DIR}/db"
cp -r ${./db}/* "''${YORE_DBMATE_DIR}/db"
cd "''${YORE_DBMATE_DIR}"
dbmate up
# Replace bash and inherit PID 1
cd /
exec yore
'';
};
in { in {
packages = rec { packages = rec {
docker =
pkgs.dockerTools.buildImage {
name = "git.pbrinkmeier.de/paul/yore";
tag = yore.version;
config.Cmd = [ "${yore}/bin/yore" ];
};
default = yore; default = yore;
inherit yore image;
yore-meta = pkgs.runCommand "yore-meta" {} ''
mkdir -p $out
echo -n ${yore.version} > $out/version
echo -n ${image.drvAttrs.imageName}:${image.drvAttrs.imageTag} > $out/image-tag
'';
opium_ = opium.packages.${system}.opium; opium_ = opium.packages.${system}.opium;
}; };
@@ -82,5 +117,11 @@
overrides = addOpium; overrides = addOpium;
}).env; }).env;
}; };
apps = {
crane = {
type = "app";
program = "${pkgs.crane}/bin/crane";
};
};
}); });
} }
+1 -1
View File
@@ -1,7 +1,7 @@
cabal-version: 3.4 cabal-version: 3.4
name: yore name: yore
version: 0 version: 0.0.7
author: Paul Brinkmeier author: Paul Brinkmeier
maintainer: hallo@pbrinkmeier.de maintainer: hallo@pbrinkmeier.de
copyright: 2023 Paul Brinkmeier copyright: 2023 Paul Brinkmeier