add config parameter so consumers can change defaults

This commit is contained in:
Emil Lerch 2026-02-03 15:42:28 -08:00
parent b420abb0a1
commit ed9c7ced6c
Signed by untrusted user: 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,
.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.
///
/// 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
///
/// 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
/// - `-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: "{}")
/// - `-Denv-file=[string]`: Path to environment variables file (KEY=VALUE format)
/// - `-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(.{ ... });
/// 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
const lambda_build_dep = lambda_zig_dep.builder.dependency("lambda_build", .{
.target = b.graph.host,
.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 = .{
.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.
// Only files and directories listed here are included in the `hash` that

View file

@ -5,6 +5,19 @@
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.
///
/// Adds the following build steps:
@ -12,23 +25,27 @@ const std = @import("std");
/// - awslambda_iam: Create/verify IAM role
/// - awslambda_deploy: Deploy the function to AWS
/// - 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(
b: *std.Build,
lambda_build_dep: *std.Build.Dependency,
exe: *std.Build.Step.Compile,
config: Config,
) !void {
// Get the lambda-build CLI artifact from the dependency
const cli = lambda_build_dep.artifact("lambda-build");
// Get configuration options
const function_name = b.option([]const u8, "function-name", "Function name for Lambda") orelse "zig-fn";
// Get configuration options (command-line overrides config defaults)
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 profile = b.option([]const u8, "profile", "AWS profile") orelse null;
const role_name = b.option(
[]const u8,
"role-name",
"IAM role name (default: lambda_basic_execution)",
) orelse "lambda_basic_execution";
) orelse config.default_role_name;
const payload = b.option(
[]const u8,
"payload",

View file

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