add config parameter so consumers can change defaults
All checks were successful
Lambda-Zig Build / build (push) Successful in 55s

This commit is contained in:
Emil Lerch 2026-02-03 15:42:28 -08:00
parent b420abb0a1
commit ed9c7ced6c
Signed by: lobo
GPG key ID: A7B62D657EF764F8
4 changed files with 46 additions and 16 deletions

View file

@ -107,9 +107,12 @@ fn configureBuildInternal(b: *std.Build, exe: *std.Build.Step.Compile) !void {
.target = b.graph.host, .target = b.graph.host,
.optimize = .ReleaseSafe, .optimize = .ReleaseSafe,
}); });
try @import("lambdabuild.zig").configureBuild(b, lambda_build_dep, exe); try @import("lambdabuild.zig").configureBuild(b, lambda_build_dep, exe, .{});
} }
/// Re-export LambdaConfig for consumers
pub const LambdaConfig = @import("lambdabuild.zig").Config;
/// Configure Lambda build steps for a Zig project. /// Configure Lambda build steps for a Zig project.
/// ///
/// This function adds build steps and options for packaging and deploying /// This function adds build steps and options for packaging and deploying
@ -127,12 +130,15 @@ fn configureBuildInternal(b: *std.Build, exe: *std.Build.Step.Compile) !void {
/// ///
/// ## Build Options /// ## Build Options
/// ///
/// The following options are added to the build: /// The following options are added to the build (command-line options override
/// config defaults):
/// ///
/// - `-Dfunction-name=[string]`: Name of the Lambda function (default: "zig-fn") /// - `-Dfunction-name=[string]`: Name of the Lambda function
/// (default: "zig-fn", or as provided by config parameter)
/// - `-Dregion=[string]`: AWS region for deployment and invocation /// - `-Dregion=[string]`: AWS region for deployment and invocation
/// - `-Dprofile=[string]`: AWS profile to use for credentials /// - `-Dprofile=[string]`: AWS profile to use for credentials
/// - `-Drole-name=[string]`: IAM role name (default: "lambda_basic_execution") /// - `-Drole-name=[string]`: IAM role name
/// (default: "lambda_basic_execution", or as provided by config parameter)
/// - `-Dpayload=[string]`: JSON payload for invocation (default: "{}") /// - `-Dpayload=[string]`: JSON payload for invocation (default: "{}")
/// - `-Denv-file=[string]`: Path to environment variables file (KEY=VALUE format) /// - `-Denv-file=[string]`: Path to environment variables file (KEY=VALUE format)
/// - `-Dallow-principal=[string]`: AWS service principal to grant invoke permission /// - `-Dallow-principal=[string]`: AWS service principal to grant invoke permission
@ -155,14 +161,25 @@ fn configureBuildInternal(b: *std.Build, exe: *std.Build.Step.Compile) !void {
/// const exe = b.addExecutable(.{ ... }); /// const exe = b.addExecutable(.{ ... });
/// b.installArtifact(exe); /// b.installArtifact(exe);
/// ///
/// try lambda_zig.configureBuild(b, lambda_zig_dep, exe); /// // Use default config (function name defaults to "zig-fn")
/// try lambda_zig.configureBuild(b, lambda_zig_dep, exe, .{});
///
/// // Or specify project-level defaults
/// try lambda_zig.configureBuild(b, lambda_zig_dep, exe, .{
/// .default_function_name = "my-function",
/// });
/// } /// }
/// ``` /// ```
pub fn configureBuild(b: *std.Build, lambda_zig_dep: *std.Build.Dependency, exe: *std.Build.Step.Compile) !void { pub fn configureBuild(
b: *std.Build,
lambda_zig_dep: *std.Build.Dependency,
exe: *std.Build.Step.Compile,
config: LambdaConfig,
) !void {
// Get lambda_build from the lambda_zig dependency's Build context // Get lambda_build from the lambda_zig dependency's Build context
const lambda_build_dep = lambda_zig_dep.builder.dependency("lambda_build", .{ const lambda_build_dep = lambda_zig_dep.builder.dependency("lambda_build", .{
.target = b.graph.host, .target = b.graph.host,
.optimize = .ReleaseSafe, .optimize = .ReleaseSafe,
}); });
try @import("lambdabuild.zig").configureBuild(b, lambda_build_dep, exe); try @import("lambdabuild.zig").configureBuild(b, lambda_build_dep, exe, config);
} }

View file

@ -9,10 +9,6 @@
.lambda_build = .{ .lambda_build = .{
.path = "tools/build", .path = "tools/build",
}, },
.aws = .{
.url = "git+https://git.lerch.org/lobo/aws-sdk-for-zig#686b18d1f4329e80cf6d9b916eaa0c231333edb9",
.hash = "aws-0.0.1-SbsFcAc3CgCdWfayHWFazNfJBxkzLyU2wOJSj7h4W17-",
},
}, },
// Specifies the set of files and directories that are included in this package. // Specifies the set of files and directories that are included in this package.
// Only files and directories listed here are included in the `hash` that // Only files and directories listed here are included in the `hash` that

View file

@ -5,6 +5,19 @@
const std = @import("std"); const std = @import("std");
/// Configuration options for Lambda build integration.
///
/// These provide project-level defaults that can still be overridden
/// via command-line options (e.g., `-Dfunction-name=...`).
pub const Config = struct {
/// Default function name if not specified via -Dfunction-name.
/// This allows consuming projects to set their own default.
default_function_name: []const u8 = "zig-fn",
/// Default IAM role name if not specified via -Drole-name.
default_role_name: []const u8 = "lambda_basic_execution",
};
/// Configure Lambda build steps for a Zig project. /// Configure Lambda build steps for a Zig project.
/// ///
/// Adds the following build steps: /// Adds the following build steps:
@ -12,23 +25,27 @@ const std = @import("std");
/// - awslambda_iam: Create/verify IAM role /// - awslambda_iam: Create/verify IAM role
/// - awslambda_deploy: Deploy the function to AWS /// - awslambda_deploy: Deploy the function to AWS
/// - awslambda_run: Invoke the deployed function /// - awslambda_run: Invoke the deployed function
///
/// The `config` parameter allows setting project-level defaults that can
/// still be overridden via command-line options.
pub fn configureBuild( pub fn configureBuild(
b: *std.Build, b: *std.Build,
lambda_build_dep: *std.Build.Dependency, lambda_build_dep: *std.Build.Dependency,
exe: *std.Build.Step.Compile, exe: *std.Build.Step.Compile,
config: Config,
) !void { ) !void {
// Get the lambda-build CLI artifact from the dependency // Get the lambda-build CLI artifact from the dependency
const cli = lambda_build_dep.artifact("lambda-build"); const cli = lambda_build_dep.artifact("lambda-build");
// Get configuration options // Get configuration options (command-line overrides config defaults)
const function_name = b.option([]const u8, "function-name", "Function name for Lambda") orelse "zig-fn"; const function_name = b.option([]const u8, "function-name", "Function name for Lambda") orelse config.default_function_name;
const region = b.option([]const u8, "region", "AWS region") orelse null; const region = b.option([]const u8, "region", "AWS region") orelse null;
const profile = b.option([]const u8, "profile", "AWS profile") orelse null; const profile = b.option([]const u8, "profile", "AWS profile") orelse null;
const role_name = b.option( const role_name = b.option(
[]const u8, []const u8,
"role-name", "role-name",
"IAM role name (default: lambda_basic_execution)", "IAM role name (default: lambda_basic_execution)",
) orelse "lambda_basic_execution"; ) orelse config.default_role_name;
const payload = b.option( const payload = b.option(
[]const u8, []const u8,
"payload", "payload",

View file

@ -4,8 +4,8 @@
.fingerprint = 0x6e61de08e7e51114, .fingerprint = 0x6e61de08e7e51114,
.dependencies = .{ .dependencies = .{
.aws = .{ .aws = .{
.url = "git+https://git.lerch.org/lobo/aws-sdk-for-zig#fd568f26b976e5f84b27261fccd7b5c2fc9a14c0", .url = "git+https://git.lerch.org/lobo/aws-sdk-for-zig#c1df6ef3a6f4eb4eb75608c3cc6488cffc300793",
.hash = "aws-0.0.1-SbsFcEs5CgDQYOMkJZ14smUrAFVzQaf6G6l1IOYpwrMA", .hash = "aws-0.0.1-SbsFcC47CgCWY3bwHxku5J4BAohk-6UJZEUX1B0azJ_D",
}, },
}, },
.paths = .{ .paths = .{