Skip to content
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
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ jobs:
unit_test_and_coverage:
runs-on: ubuntu-latest
container:
image: imng/zero-kcov:0.1
image: imng/zero-kcov:0.2
options: --security-opt seccomp=unconfined
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_TOKEN }}

- name: Set Zig 0.15.2 as active
- name: Set Zig 0.16.0 as active
run: |
zig version
kcov --version
Expand All @@ -36,10 +36,10 @@ jobs:
if [ -f zig-out/kcov/test/coverage.json ]; then
COVERAGE=$(jq -r '.percent_covered' zig-out/kcov/test/coverage.json)
echo "coverage=$COVERAGE" >> $GITHUB_OUTPUT
echo "Coverage for Zig 0.15.2: $COVERAGE%"
echo "Coverage for Zig 0.16.0: $COVERAGE%"
else
echo "coverage=0" >> $GITHUB_OUTPUT
echo "Coverage for Zig 0.15.2: 0%"
echo "Coverage for Zig 0.16.0: 0%"
fi

- name: Update README with coverage
Expand Down
23 changes: 12 additions & 11 deletions Dockerfiles/alpine.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ RUN mkdir -p /opt/zig-0.15.1 /opt/zig-0.15.2 /opt/zig-0.16.0 /opt/kcov
# && rm zig-x86_64-linux-0.15.1.tar.xz

# Install Zig 0.15.2
RUN wget -q https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \
&& tar -xJf zig-x86_64-linux-0.15.2.tar.xz -C /opt/zig-0.15.2 --strip-components=1 \
&& rm zig-x86_64-linux-0.15.2.tar.xz
# RUN wget -q https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \
# && tar -xJf zig-x86_64-linux-0.15.2.tar.xz -C /opt/zig-0.15.2 --strip-components=1 \
# && rm zig-x86_64-linux-0.15.2.tar.xz

# Install Zig 0.16.0
# RUN wget -q https://ziglang.org/download/0.16.0/zig-x86_64-linux-0.16.0.tar.xz \
# && tar -xJf zig-x86_64-linux-0.16.0.tar.xz -C /opt/zig-0.16.0 --strip-components=1 \
# && rm zig-x86_64-linux-0.16.0.tar.xz
RUN wget -q https://ziglang.org/download/0.16.0/zig-x86_64-linux-0.16.0.tar.xz \
&& tar -xJf zig-x86_64-linux-0.16.0.tar.xz -C /opt/zig-0.16.0 --strip-components=1 \
&& rm zig-x86_64-linux-0.16.0.tar.xz

# Install kcov from source
RUN wget -q https://github.com/SimonKagstrom/kcov/archive/refs/heads/master.tar.gz \
Expand All @@ -52,7 +52,7 @@ RUN wget -q https://github.com/SimonKagstrom/kcov/archive/refs/heads/master.tar.
FROM alpine:latest
LABEL maintainer="im-ng"
LABEL description="Multi-version Zig CI container with kcov coverage support"
LABEL version="0.1"
LABEL version="0.2"

# Update dependencies for zig, zero, kcov
RUN apk add --no-cache \
Expand All @@ -64,20 +64,21 @@ RUN apk add --no-cache \
binutils-dev curl-dev elfutils-dev

# Create working directories
RUN mkdir -p /usr/local/zig-0.15.2 /app
# RUN mkdir -p /usr/local/zig-0.15.2 /app
RUN mkdir -p /usr/local/zig-0.16.0 /app

COPY --from=builder /opt/kcov* /usr/
COPY --from=builder /opt/zig-0.15.2 /usr/local/zig-0.15.2/
COPY --from=builder /opt/zig-0.16.0 /usr/local/zig-0.16.0/
# RUN ls -alt /usr/local/zig-0.15.2/
# RUN ls -alth

# Set environment variables for Zig versions
# ENV ZIG151=/opt/zig/zig-0.15.1
# ENV ZIG152=/opt/zig/zig-0.15.2
# ENV ZIG160=/opt/zig/zig-0.16.0
ENV ZIG=/usr/local/zig-0.15.2
ENV ZIG=/usr/local/zig-0.16.0

RUN ln -s /usr/local/zig-0.15.2/zig /usr/local/bin/zig
RUN ln -s /usr/local/zig-0.16.0/zig /usr/local/bin/zig
# RUN chmod -R 777 /usr/local/zig-0.15.2
# ENV PATH="${ZIG151}:${ZIG152}:${ZIG160}:${PATH}"
# ENV PATH="${ZIG}:${PATH}"
Expand Down
30 changes: 16 additions & 14 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,22 @@ top:

clean:
rm -rf .zig-cache zig-out zig-pkg
rm -rf examples/zero-auth/.zig-cache examples/zero-auth/zig-out
rm -rf examples/zero-basic/.zig-cache examples/zero-basic/zig-out
rm -rf examples/zero-cronz/.zig-cache examples/zero-cronz/zig-out
rm -rf examples/zero-migration/.zig-cache examples/zero-migration/zig-out
rm -rf examples/zero-mqtt-publisher/.zig-cache examples/zero-mqtt-publisher/zig-out
rm -rf examples/zero-mqtt-subscriber/.zig-cache examples/zero-mqtt-subscriber/zig-out
rm -rf examples/zero-redis/.zig-cache examples/zero-redis/zig-out
rm -rf examples/zero-service-client/.zig-cache examples/zero-service-client/zig-out
rm -rf examples/zero-stream/.zig-cache examples/zero-stream/zig-out
rm -rf examples/zero-todo-htmx/.zig-cache examples/zero-todo-htmx/zig-out
rm -rf examples/zero-websocket/.zig-cache examples/zero-websocket/zig-out
rm -rf examples/zero-kafka-publisher/.zig-cache examples/zero-kafka-publisher/zig-out
rm -rf examples/zero-kafka-subscriber/.zig-cache examples/zero-kafka-subscriber/zig-out
rm -rf examples/zero-sqlite/.zig-cache examples/zero-sqlite/zig-out
rm -rf examples/zero-auth/.zig-cache examples/zero-auth/zig-out examples/zero-auth/zig-pkg
rm -rf examples/zero-basic/.zig-cache examples/zero-basic/zig-out examples/zero-basic/zig-pkg
rm -rf examples/zero-cronz/.zig-cache examples/zero-cronz/zig-out examples/zero-cronz/zig-pkg
rm -rf examples/zero-migration/.zig-cache examples/zero-migration/zig-out examples/zero-migration/zig-pkg
rm -rf examples/zero-mqtt-publisher/.zig-cache examples/zero-mqtt-publisher/zig-out examples/zero-mqtt-publisher/zig-pkg
rm -rf examples/zero-mqtt-subscriber/.zig-cache examples/zero-mqtt-subscriber/zig-out examples/zero-mqtt-subscriber/zig-pkg
rm -rf examples/zero-redis/.zig-cache examples/zero-redis/zig-out examples/zero-redis/zig-pkg
rm -rf examples/zero-service-client/.zig-cache examples/zero-service-client/zig-out examples/zero-service-client/zig-pkg
rm -rf examples/zero-stream/.zig-cache examples/zero-stream/zig-out examples/zero-stream/zig-pkg
rm -rf examples/zero-todo-htmx/.zig-cache examples/zero-todo-htmx/zig-out examples/zero-todo-htmx/zig-pkg
rm -rf examples/zero-websocket/.zig-cache examples/zero-websocket/zig-out examples/zero-websocket/zig-pkg
rm -rf examples/zero-kafka-publisher/.zig-cache examples/zero-kafka-publisher/zig-out examples/zero-kafka-publisher/zig-pkg
rm -rf examples/zero-kafka-subscriber/.zig-cache examples/zero-kafka-subscriber/zig-out examples/zero-kafka-subscriber/zig-pkg
rm -rf examples/zero-sqlite/.zig-cache examples/zero-sqlite/zig-out examples/zero-sqlite/zig-pkg
rm -rf examples/zero-nats-publisher/.zig-cache examples/zero-nats-publisher/zig-out examples/zero-nats-publisher/zig-pkg
rm -rf examples/zero-nats-subscriber/.zig-cache examples/zero-nats-subscriber/zig-out examples/zero-nats-subscriber/zig-pkg

release:
zig build --release=fast
Expand Down
13 changes: 7 additions & 6 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ pub fn build(b: *std.Build) void {
const httpz = b.dependency("httpz", .{});
module.addImport("httpz", httpz.module("httpz"));

const metriks = b.dependency("metriks", .{});
module.addImport("metriks", metriks.module("metriks"));

const env = b.dependency("dotenv", .{});
module.addImport("dotenv", env.module("dotenv"));

Expand All @@ -44,6 +41,9 @@ pub fn build(b: *std.Build) void {
const sqlite = b.dependency("sqlite", .{});
module.addImport("sqlite", sqlite.module("sqlite"));

const nats = b.dependency("nats", .{});
module.addImport("nats", nats.module("nats"));

// if (b.option(
// bool,
// "kafka",
Expand All @@ -55,7 +55,9 @@ pub fn build(b: *std.Build) void {
module.addIncludePath(.{ .cwd_relative = "/usr/local/Cellar/librdkafka/2.13.0/include" });
module.addLibraryPath(.{ .cwd_relative = "/usr/local/Cellar/librdkafka/2.13.0/lib" });
}
module.linkSystemLibrary("rdkafka", .{ .weak = true });
module.linkSystemLibrary("rdkafka", .{
.weak = true,
});

const test_module = b.createModule(.{
.root_source_file = b.path("src/tests.zig"),
Expand All @@ -64,7 +66,6 @@ pub fn build(b: *std.Build) void {
});
test_module.addImport("pg", pgz.module("pg"));
test_module.addImport("httpz", httpz.module("httpz"));
test_module.addImport("metriks", metriks.module("metriks"));
test_module.addImport("dotenv", env.module("dotenv"));
test_module.addImport("zul", zul.module("zul"));
test_module.addImport("rediz", rediz.module("okredis"));
Expand All @@ -73,6 +74,7 @@ pub fn build(b: *std.Build) void {
test_module.addImport("mqttz", mqttz.module("mqttz"));
test_module.addImport("jwt", jwt.module("zig-jwt"));
test_module.addImport("sqlite", sqlite.module("sqlite"));
test_module.addImport("nats", nats.module("nats"));
test_module.addImport("zero", module);

if (builtin.os.tag == .macos) {
Expand All @@ -83,7 +85,6 @@ pub fn build(b: *std.Build) void {

const unit_tests = b.addTest(.{
.root_module = test_module,
.use_llvm = true,
});

const test_step = b.step("test", "Run tests");
Expand Down
74 changes: 37 additions & 37 deletions build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,61 @@
.name = .zero,
.version = "0.0.2",
.fingerprint = 0xabdef192c03b44cb,
.minimum_zig_version = "0.15.2",
.minimum_zig_version = "0.16.0",
.dependencies = .{
// .dotenv = .{ .path = "../dotenv" },
// .httpz = .{ .path = "../http.zig" },
// .metrics = .{ .path = "../metrics.zig" },
// .jwt = .{ .path = "../zig-jwt" },
// .regexp = .{ .path = "../zig-regex" },
// .mqttz = .{ .path = "../mqttz" },
// .pg = .{ .path = "../pg.zig" },
// .zul = .{ .path = "../zul" },
// .okredis = .{ .path = "../okredis" },
// .zul = .{ .path = "../zul" },
// .httpz = .{ .path = "../http.zig" },
// .zdt = .{ .path = "../zdt" },
// .mqttz = .{ .path = "../mqttz" },
// .regexp = .{ .path = "../zig-regex" },
// .jwt = .{ .path = "../zig-jwt" },
.jwt = .{
.url = "git+https://github.com/im-ng/zig-jwt.git#0c0fd114a9f3a4f4901fc0eac28821feebfb29f9",
.hash = "zig_jwt-1.3.3-w3q9SOY0BAAfF6i8vq9S4JJR_rw3QSSm8gFQ_RYx3vRQ",
// .dotenv = .{ .path = "../dotenv" },
// .sqlite = .{ .path = "../zig-sqlite" },
.zdt = .{
.url = "git+https://codeberg.org/FObersteiner/zdt.git?ref=v0.9.5#0db1d32005b7058fea0138e97976cc55b58b403d",
.hash = "zdt-0.9.5-xr0_vK7ZEQDFyjfdx_ds5WMEMEUCfUkOnNqLNyvaA8b9",
},
.regexp = .{
.url = "git+https://github.com/im-ng/zig-regex.git#ee759955e59ae292f4074d62308f953feeecac61",
.hash = "regex-0.1.3-axC352raAQCBo-WcgB_nFMFmO2d3QLBLpE8-ebizdeX_",
.dotenv = .{
.url = "git+https://github.com/dying-will-bullet/dotenv.git#f6dff7ce2c39ceaafd00114c7d0674376cd82b87",
.hash = "dotenv-0.3.0-hfaNFtm3AACGiIZx5jDPHB4Q1QGs9BEMKH-sq32ZxRXa",
},
.mqttz = .{
.url = "git+https://github.com/im-ng/mqttz.git#bba199c808200cf51ae9bea86577c646bed627bc",
.hash = "mqttz-0.0.0-ywFE_5QMAwAWoMQe29cn9PMnPf6BYSSiJC-BZPCvw70c",
.httpz = .{
.url = "git+https://github.com/im-ng/http.zig#a150c6228fdcf5a4ae4cb38f6e0c2e7040acf7cb",
.hash = "httpz-0.0.0-PNVzrPYUCQCsmlsCu1UW6CWzwLann2nDqlwM-olFXom2",
},
.pg = .{
.url = "git+https://github.com/im-ng/pg.zig.git#c187af6760d4a923ff4c4020db76aae3c8b8a273",
.hash = "pg-0.0.0-Wp_7geUtBgC21DUn8zhRP3jDdWwXk3DjUyjFv7301VtI",
.url = "git+https://github.com/karlseguin/pg.zig.git#2e15df7c3b635977bc2733bacd921f3395383860",
.hash = "pg-0.0.0-Wp_7gRK8BgDzp9DPArDotLfTq_aV1NLpNZtWxsOITFdZ",
},
.okredis = .{
.url = "git+https://github.com/im-ng/zig-okredis.git#f53ad9f03a57d41d89b3ee779aaca608e1e4767f",
.hash = "okredis-0.1.0-Cg726vcEBAAjrhwgBJ2cjL4qN3ircjBsX6iTd7wEFiEC",
.url = "git+https://github.com/kristoff-it/zig-okredis.git#c38db4cefd8958dd67730a5965ec247e51a6ef64",
.hash = "okredis-0.1.0-Cg726ncIBAC50n1bNNhRPsT3g27LrKhTttUGu9MHaGJR",
},
.zul = .{
.url = "git+https://github.com/im-ng/zul.git#e770047f208cf4538fcd9fc64550c84fd5492fc4",
.hash = "zul-0.0.0-1oDot9yRBwDA_ovd6GC1M_ViW3LarywMaGrH6vcuEjqv",
.url = "git+https://github.com/karlseguin/zul.git#146f9d5b2238c3a621b96345adf03490900c2fe2",
.hash = "zul-0.0.0-1oDot2KwBwC9c43wC7V9y4-xxg0a_d9okFDcJPhqmije",
},
.httpz = .{
.url = "git+https://github.com/im-ng/http.zig.git#d21498e2343a4eeab61a57e913f67a3862623d78",
.hash = "httpz-0.0.0-PNVzrEnhBgBwAemUFsKHu7IrGXnIEPAo8oI6HtIaoTan",
.jwt = .{
.url = "git+https://github.com/deatil/zig-jwt.git#741cb09c871246cc1959cc00c2f758a83fdc3e79",
.hash = "zig_jwt-1.5.15-w3q9SD16BAC6Kuc-1hFYYdoFh9BGo4mhvSSNASQY0EmN",
},
.zdt = .{
.url = "git+https://codeberg.org/imng/zdt.git#fa55f4080752ce1c48f2bb392e9513f87b59d8cb",
.hash = "zdt-0.8.1-xr0_vABUDwDExZVsT91Qid0tOc_48sI47Xhg6nbFsqqC",
.regexp = .{
.url = "git+https://github.com/tiehuis/zig-regex.git#49c5694c8b3ee4ae4a7131035a44a69841ef4740",
.hash = "regex-0.1.3-axC357jaAQBRENglwG9NTcuej8pYz1IZmfwER_AXMlHZ",
},
.metriks = .{
.url = "git+https://github.com/im-ng/metrics.zig.git#2011171f3542f213b4742f96ed0934f56218b8a7",
.hash = "metriks-0.0.0-sq540f2_AQCTNA7_ZQWKehRfXynKHT_0baiw5RFDv_3W",
.mqttz = .{
.url = "git+https://github.com/karlseguin/mqttz.git#cf8acd2c1acae7f5c1c67b7df53228e7dd8c8c74",
.hash = "mqttz-0.0.0-ywFE_2ZfAwAc6PsPYZq1W7G-EqzyhFPeCbXS_86Qj98V",
},
.sqlite = .{
.url = "git+https://github.com/im-ng/zig-sqlite.git#fb73a6cca771c0c26fbab1a1f7689c23ec786257",
.hash = "sqlite-3.48.0-F2R_a8WODgDamFQx1fOrpgY7IdluD4Sr_P7G0UPxUUMr",
.url = "git+https://github.com/im-ng/zig-sqlite.git#4af3be0231d5dc1765467b87f1d0df51bbeb9121",
.hash = "sqlite-3.48.0-F2R_a0iSDgCgU0ZDXF9fgYM8tauaFdYyt5L9lDYWxjPC",
},
.dotenv = .{
.url = "git+https://github.com/im-ng/dotenv.git#e5e09fad22499c4bedfb6cb03fb298581de3174f",
.hash = "dotenv-0.2.3-ikMfwFR3AAAdjNnXfM40c1ml45J2cF3axl6p1WGBfcb1",
.nats = .{
.url = "git+https://github.com/nats-io/nats.zig#883d29c25db420f59133bc5098059191e6ac6b02",
.hash = "nats-0.1.0-991asQCWHwBIwVHZJpXV_b7mll-5F78o_F_vunrfuBm7",
},
},
.paths = .{
Expand Down
2 changes: 1 addition & 1 deletion examples/zero-auth/build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
.name = .authserver,
.version = "0.0.1",
.fingerprint = 0x1c77681fa9ac8842,
.minimum_zig_version = "0.15.1",
.minimum_zig_version = "0.16.0",
.dependencies = .{
.zero = .{ .path = "../../." },
},
Expand Down
9 changes: 6 additions & 3 deletions examples/zero-auth/src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const Context = zero.Context;
const ClientError = zero.Error.ClientError;
const Client = zero.client;
const jwtClaims = zero.jwtClaims;
const utils = zero.utils;

pub const publicKey = struct {
kid: []const u8,
Expand All @@ -24,12 +25,14 @@ pub const std_options: std.Options = .{
.logFn = zero.logger.custom,
};

pub fn main() !void {
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
pub fn main(init: std.process.Init) !void {
utils.setIo(init.io);

var gpa: std.heap.DebugAllocator(.{}) = .init;
const allocator = gpa.allocator();
_ = gpa.detectLeaks();

const app: *App = try App.new(allocator);
const app: *App = try App.new(allocator, init.environ_map);

try app.get("/basic", basicResponse);

Expand Down
1 change: 1 addition & 0 deletions examples/zero-basic/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ pub fn build(b: *std.Build) void {

const exe = b.addExecutable(.{
.name = "basic",
// .use_llvm = true,
.root_module = b.createModule(.{
.root_source_file = b.path("src/main.zig"),
.target = target,
Expand Down
2 changes: 1 addition & 1 deletion examples/zero-basic/build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
.name = .httpserver,
.version = "0.0.1",
.fingerprint = 0xa328853f6ec9a2ef,
.minimum_zig_version = "0.15.1",
.minimum_zig_version = "0.16.0",
.dependencies = .{
.zero = .{ .path = "../../." },
},
Expand Down
18 changes: 9 additions & 9 deletions examples/zero-basic/src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@ pub const std_options: std.Options = .{
.logFn = zero.logger.custom,
};

fn panic(_: []const u8, _: ?*std.builtin.StackTrace, _: ?usize) noreturn {
var it = std.debug.StackIterator.init(@returnAddress(), null);
var ix: usize = 0;
fn panic(msg: []const u8, return_address: ?usize) noreturn {
_ = msg;
std.log.err("=== Stack Trace ==============", .{});
while (it.next()) |frame| : (ix += 1) {
std.log.err("#{d:0>2}: 0x{X:0>16}", .{ ix, frame });
}
std.debug.dumpCurrentStackTrace(.{ .first_address = return_address });
std.process.exit(1);
}

pub fn main() !void {
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
pub fn main(init: std.process.Init) !void {
utils.setIo(init.io);

var gpa: std.heap.DebugAllocator(.{}) = .init;
const allocator = gpa.allocator();

const app = try App.new(allocator);
const app = try App.new(allocator, init.environ_map);

try app.get("/", index);

Expand Down
3 changes: 1 addition & 2 deletions examples/zero-cronz/build.zig.zon
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
.name = .zerocronz,
.version = "0.0.1",
.fingerprint = 0x8e5bb82bf53df309,
.minimum_zig_version = "0.15.1",
.minimum_zig_version = "0.16.0",
.dependencies = .{
.zero = .{ .path = "../../." },
},
Expand All @@ -11,5 +11,4 @@
"build.zig.zon",
"src",
},
.use_llvm = true,
}
8 changes: 5 additions & 3 deletions examples/zero-cronz/src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ pub const std_options: std.Options = .{
.logFn = zero.logger.custom,
};

pub fn main() !void {
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init;
pub fn main(init: std.process.Init) !void {
utils.setIo(init.io);

var gpa: std.heap.DebugAllocator(.{}) = .init;
const allocator = gpa.allocator();
_ = gpa.detectLeaks();

const app = try App.new(allocator);
const app = try App.new(allocator, init.environ_map);

try app.addCronJob("* * * * * *", "task-1", task1);
app.container.log.info("task 1 occurs every 5 seconds of minutes");
Expand Down
Loading
Loading