Skip to content

Commit

Permalink
allow both terraform and (default) opentofu
Browse files Browse the repository at this point in the history
  • Loading branch information
KiaraGrouwstra committed Jan 17, 2025
1 parent 33785da commit a570094
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 46 deletions.
106 changes: 63 additions & 43 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,13 @@

terraformProviders = pkgs.terraform-providers.actualProviders;

release = pkgs.runCommand "release-tarball"
getRelease = terraform: pkgs.runCommand "release-tarball"
{
nativeBuildInputs = [ pkgs.pixz ];
} ''
mkdir -p $out
mkdir tf-ncl
${lib.concatLines (lib.flip lib.mapAttrsToList inputs.self.schemas.${system} (provider: schema: ''
${lib.concatLines (lib.flip lib.mapAttrsToList (getSchemas terraform) (provider: schema: ''
cp ${schema} tf-ncl/${provider}.ncl
''))}
tar --sort=name --mtime='@1' --owner=0 --group=0 --numeric-owner -c tf-ncl/*.ncl | pixz -t > $out/tf-ncl.tar.xz
Expand All @@ -139,10 +139,9 @@
set -e -x
${lib.concatMapStringsSep "\n" (tmpl: "${test-single-example tmpl}") (lib.attrNames self.templates)}
'';
in
{
checks =
self.schemas.${system} //

getChecks = terraform:
(getSchemas terraform) //
(lib.mapAttrs'
(name: drv: lib.nameValuePair "check-${name}" (
let
Expand All @@ -167,39 +166,78 @@
${inputs.nickel.packages.${system}.default}/bin/nickel export ${conf} > $out
''
))
self.schemas.${system}) //
(getSchemas terraform)) //
{
inherit tf-ncl schema-merge pre-commit;
};

packages = {
getPackages = terraform: {
default = tf-ncl;
terraform = pkgs.terraform;
inherit tf-ncl schema-merge release test-examples;
} // lib.mapAttrs' (name: value: lib.nameValuePair "schema-${name}" value) self.schemas.${system};
inherit terraform tf-ncl schema-merge test-examples;
release = getRelease terraform;
} // lib.mapAttrs' (name: value: lib.nameValuePair "schema-${name}" value) (getSchemas terraform);

inherit terraformProviders;

generateJsonSchema = providerFn: pkgs.callPackage
generateJsonSchema = terraform: providerFn: pkgs.callPackage
(import ./nix/terraform_schema.nix (providerFn terraformProviders))
{ inherit (self.packages.${system}) schema-merge; };
{ inherit terraform; inherit (getPackages terraform) schema-merge; };

generateSchema = providerFn: pkgs.callPackage
generateSchema = terraform: providerFn: pkgs.callPackage
./nix/nickel_schema.nix
{ jsonSchema = self.generateJsonSchema.${system} providerFn; inherit (self.packages.${system}) tf-ncl; };
{ jsonSchema = (generateJsonSchema terraform) providerFn; inherit (getPackages terraform) tf-ncl; };

schemas = lib.mapAttrs
(name: p: self.generateSchema.${system} (_: { ${name} = p; }))
getSchemas = terraform: lib.mapAttrs
(name: p: (generateSchema terraform) (_: { ${name} = p; }))
terraformProviders;

getDevShell = terraform: pkgs.mkShell {
inputsFrom = builtins.attrValues (getChecks terraform);
buildInputs = [ terraform ] ++ (with pkgs; [
cargo
rustc
inputs.nickel.packages.${system}.default
rust-analyzer
rustfmt
clippy
nixpkgs-fmt
inputs.topiary.packages.${system}.default

go
gopls
gotools
go-tools
gofumpt
]);
shellHook = ''
${pre-commit.shellHook}
'';
};

tf = {
inherit (pkgs) terraform opentofu;
};
in
{
inherit terraformProviders;

packages = getPackages tf.opentofu;

checks = getChecks tf.opentofu;

lib = {
mkDevShell =
{ providers, extraNickelInput ? "", packages ? [ ] }: pkgs.mkShell {
{ providers
, extraNickelInput ? ""
, terraform ? tf.opentofu
, packages ? [ ]
,
}:
args: pkgs.mkShell {
buildInputs = lib.attrValues
(pkgs.callPackage ./nix/devshell.nix
{
generateSchema = self.generateSchema.${system};
generateSchema = generateSchema terraform;
nickel = inputs.nickel.packages.${system}.nickel-lang-cli;
inherit terraform;
}
{ inherit providers extraNickelInput; }) ++ packages ++ [
inputs.nickel.packages.${system}.default
Expand All @@ -215,28 +253,10 @@
};
};

devShells.default = pkgs.mkShell {
inputsFrom = builtins.attrValues self.checks;
buildInputs = with pkgs; [
cargo
rustc
terraform
inputs.nickel.packages.${system}.default
rust-analyzer
rustfmt
clippy
nixpkgs-fmt
inputs.topiary.packages.${system}.default

go
gopls
gotools
go-tools
gofumpt
];
shellHook = ''
${pre-commit.shellHook}
'';
devShells = rec {
terraform = getDevShell tf.terraform;
opentofu = getDevShell tf.opentofu;
default = opentofu;
};
}) // {
templates = rec {
Expand Down
2 changes: 1 addition & 1 deletion nix/devshell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@ in
run-terraform = writeShellScriptBin "run-terraform" ''
set -e
run-nickel
${terraform-with-plugins}/bin/terraform "$@"
${lib.getExe terraform-with-plugins} "$@"
'';
}
4 changes: 2 additions & 2 deletions nix/terraform_schema.nix
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ let
in
runCommand "${name}.json" { } ''
cp ${mainJson} main.tf.json
${terraform-with-plugins}/bin/terraform init
${terraform-with-plugins}//bin/terraform providers schema -json >$out
${lib.getExe terraform-with-plugins} init
${lib.getExe terraform-with-plugins} providers schema -json >$out
'';

providersJson = (formats.json { }).generate "providers.json" (required_providers providers);
Expand Down

0 comments on commit a570094

Please sign in to comment.