Unverified Commit a70347d6 authored by Matthieu Coudron's avatar Matthieu Coudron Committed by GitHub
Browse files

pulumiPackages: move implementation to pkgs/by-name (#386789)


    Moves pulumiPackages to pkgs/by-name/pu/pulumi/plugins.
    Updates pulumiPackages implementation to use makeScopeWithSplicing.
    Renames pulumi-{go,nodejs,python} for consistency with other plugins (with an alias if config.allowAliases option is enabled in Nixpkgs).
    Adds testResourceSchema and pulumiTestHook for plugin version bumps in the next PR.
parents fdb9eeee 9e91d890
Loading
Loading
Loading
Loading
+187 −0
Original line number Diff line number Diff line
{ buildGoModule
, fetchFromGitHub
, python3Packages
{
  buildGoModule,
  fetchFromGitHub,
  python3Packages,
}:
let
  mkBasePackage =
    { pname
    , src
    , version
    , vendorHash
    , cmd
    , extraLdflags
    , env
    , ...
    }@args: buildGoModule (rec {
      inherit pname src vendorHash version env;
    {
      pname,
      src,
      version,
      vendorHash,
      cmd,
      extraLdflags,
      env,
      ...
    }@args:
    buildGoModule (
      rec {
        inherit
          pname
          src
          vendorHash
          version
          env
          ;

        sourceRoot = "${src.name}/provider";

@@ -25,18 +35,35 @@ let
          "-s"
          "-w"
        ] ++ extraLdflags;
    } // args);
      }
      // args
    );

  mkPythonPackage =
    { meta
    , pname
    , src
    , version
    , ...
    }: python3Packages.callPackage
      ({ buildPythonPackage, pythonOlder, parver, pip, pulumi, semver, setuptools }:
    {
      meta,
      pname,
      src,
      version,
      ...
    }:
    python3Packages.callPackage (
      {
        buildPythonPackage,
        pythonOlder,
        parver,
        pip,
        pulumi,
        semver,
        setuptools,
      }:
      buildPythonPackage {
        inherit pname meta src version;
        inherit
          pname
          meta
          src
          version
          ;
        format = "pyproject";

        disabled = pythonOlder "3.7";
@@ -77,38 +104,59 @@ let
        pythonImportsCheck = [
          (builtins.replaceStrings [ "-" ] [ "_" ] pname)
        ];
      })
      { };
      }
    ) { };
in
{ owner
, repo
, rev
, version
, hash
, vendorHash
, cmdGen
, cmdRes
, extraLdflags
, env ? { }
, meta
, fetchSubmodules ? false
, ...
{
  owner,
  repo,
  rev,
  version,
  hash,
  vendorHash,
  cmdGen,
  cmdRes,
  extraLdflags,
  env ? { },
  meta,
  fetchSubmodules ? false,
  ...
}@args:
let
  src = fetchFromGitHub {
    name = "source-${repo}-${rev}";
    inherit owner repo rev hash fetchSubmodules;
    inherit
      owner
      repo
      rev
      hash
      fetchSubmodules
      ;
  };

  pulumi-gen = mkBasePackage rec {
    inherit src version vendorHash extraLdflags env;
    inherit
      src
      version
      vendorHash
      extraLdflags
      env
      ;

    cmd = cmdGen;
    pname = cmdGen;
  };
in
mkBasePackage ({
  inherit meta src version vendorHash extraLdflags env;
mkBasePackage (
  {
    inherit
      meta
      src
      version
      vendorHash
      extraLdflags
      env
      ;

    pname = repo;

@@ -134,4 +182,6 @@ mkBasePackage ({

      pname = repo;
    };
} // args)
  }
  // args
)
+15 −0
Original line number Diff line number Diff line
# shellcheck shell=bash

appendToVar preCheckHooks pulumiTestHook

pulumiTestHook() {
    local tmpdir
    tmpdir=$(mktemp -d)
    export USER=${USER-nixbld} HOME=${HOME-$tmpdir}
    export PULUMI_HOME=$tmpdir/.pulumi
    export PULUMI_CONFIG_PASSPHRASE=5up3r53cr37
    export PULUMI_SKIP_UPDATE_CHECK=1
    export PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION=1
    pulumi login "file://$tmpdir"
    pulumi stack init -- "${pulumiStackName-nixpkgs}"
}
+35 −0
Original line number Diff line number Diff line
{
  lib,
  runCommand,
  pulumi,
  jq,
}:
{
  package,
  name ? lib.removePrefix "pulumi-" (lib.getName package),
  version ? lib.getVersion package,
}:
runCommand "pulumi-resource-${name}-schema-version-check"
  {
    resourceName = name;
    expectedVersion = if version != null then version else "null";
    nativeBuildInputs = [
      jq
      pulumi
      package
    ];
    env = {
      PULUMI_SKIP_UPDATE_CHECK = "1";
      PULUMI_DISABLE_AUTOMATIC_PLUGIN_ACQUISITION = "1";
    };
    __darwinAllowLocalNetworking = true;
    meta.timeout = 120;
  }
  ''
    actualVersion=$(pulumi package get-schema -- "$resourceName" | jq -j .version)
    if [[ $expectedVersion != "$actualVersion" ]]; then
      echo "Expected schema version $expectedVersion, but got $actualVersion" >&2
      false
    fi
    mkdir -p "$out"
  ''
+7 −16
Original line number Diff line number Diff line
@@ -7,11 +7,9 @@
  git,
  buildPackages,
  # passthru
  runCommand,
  makeWrapper,
  callPackage,
  testers,
  pulumi,
  pulumiPackages,
}:
buildGoModule rec {
  pname = "pulumi";
@@ -117,25 +115,18 @@ buildGoModule rec {
  '';

  passthru = {
    pkgs = pulumiPackages;
    withPackages =
      f:
      runCommand "${pulumi.name}-with-packages"
        {
          nativeBuildInputs = [ makeWrapper ];
        }
        ''
          mkdir -p $out/bin
          makeWrapper ${pulumi}/bin/pulumi $out/bin/pulumi \
            --suffix PATH : ${lib.makeBinPath (f pulumiPackages)} \
            --set LD_LIBRARY_PATH "${lib.getLib stdenv.cc.cc}/lib"
        '';
    pkgs = callPackage ./plugins.nix { };
    withPackages = callPackage ./with-packages.nix { };
    tests = {
      version = testers.testVersion {
        package = pulumi;
        version = "v${version}";
        command = "PULUMI_SKIP_UPDATE_CHECK=1 pulumi version";
      };
      pulumiTestHookShellcheck = testers.shellcheck {
        name = "pulumi-test-hook-shellcheck";
        src = ./extra/pulumi-test-hook.sh;
      };
    };
  };

+26 −0
Original line number Diff line number Diff line
{
  lib,
  config,
  generateSplicesForMkScope,
  makeScopeWithSplicing',
  attributePathToSplice ? [ "pulumiPackages" ],
}:
makeScopeWithSplicing' {
  otherSplices = generateSplicesForMkScope attributePathToSplice;
  extra = self: {
    mkPulumiPackage = self.callPackage ./extra/mk-pulumi-package.nix { };
    testResourceSchema = self.callPackage ./extra/test-resource-schema.nix { };
    pulumiTestHook = ./extra/pulumi-test-hook.sh;
  };
  f =
    self:
    lib.packagesFromDirectoryRecursive {
      inherit (self) callPackage;
      directory = ./plugins;
    }
    // lib.optionalAttrs config.allowAliases {
      pulumi-language-go = lib.warnOnInstantiate "pulumi-language-go has been renamed to pulumi-go" self.pulumi-go;
      pulumi-language-nodejs = lib.warnOnInstantiate "pulumi-language-nodejs has been renamed to pulumi-nodejs" self.pulumi-nodejs;
      pulumi-language-python = lib.warnOnInstantiate "pulumi-language-python has been renamed to pulumi-python" self.pulumi-python;
    };
}
Loading