116 lines
3.2 KiB
Nix
116 lines
3.2 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
fetchFromGitHub,
|
|
gradle,
|
|
jdk,
|
|
jre,
|
|
makeWrapper,
|
|
testers,
|
|
runCommand,
|
|
writeText,
|
|
}:
|
|
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
pname = "smithy-cli";
|
|
version = "1.68.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "smithy-lang";
|
|
repo = "smithy";
|
|
tag = finalAttrs.version;
|
|
hash = "sha256-jME/yF6i+hQFMr8lseRKS8uSv0s6HNWqBfsRuSSzonI=";
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
gradle
|
|
jdk
|
|
makeWrapper
|
|
];
|
|
|
|
# Required on Darwin to avoid SocketException during Gradle operations
|
|
__darwinAllowLocalNetworking = true;
|
|
|
|
mitmCache = gradle.fetchDeps {
|
|
inherit (finalAttrs) pname;
|
|
data = ./deps.json;
|
|
};
|
|
|
|
# Only build the shadowJar for smithy-cli, skip native image tasks that
|
|
# would try to download Amazon Corretto
|
|
gradleBuildTask = ":smithy-cli:shadowJar";
|
|
|
|
# Fetch both compile and test dependencies during update
|
|
gradleUpdateTask = ":smithy-cli:shadowJar :smithy-cli:test";
|
|
|
|
doCheck = true;
|
|
gradleCheckTask = ":smithy-cli:test";
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/share/smithy-cli/lib $out/bin
|
|
|
|
# Install the shadow JAR and the Smithy dependency JARs that it
|
|
# deliberately excludes (they are expected on the classpath separately)
|
|
cp smithy-cli/build/libs/smithy-cli-${finalAttrs.version}.jar $out/share/smithy-cli/lib/
|
|
for proj in smithy-utils smithy-model smithy-build smithy-diff; do
|
|
cp $proj/build/libs/$proj-${finalAttrs.version}.jar $out/share/smithy-cli/lib/
|
|
done
|
|
# smithy-syntax uses the shadow plugin too, so its JAR has no classifier
|
|
cp smithy-syntax/build/libs/smithy-syntax-${finalAttrs.version}.jar $out/share/smithy-cli/lib/
|
|
|
|
# Create wrapper that puts all JARs on the classpath.
|
|
# Java's -cp wildcard syntax requires a literal '*' (not shell-expanded),
|
|
# so we construct the classpath explicitly.
|
|
classpath=$(find $out/share/smithy-cli/lib -name '*.jar' | tr '\n' ':' | sed 's/:$//')
|
|
makeWrapper ${lib.getExe jre} $out/bin/smithy \
|
|
--add-flags "-cp $classpath software.amazon.smithy.cli.SmithyCli"
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
passthru.tests = {
|
|
version = testers.testVersion {
|
|
package = finalAttrs.finalPackage;
|
|
};
|
|
validate = runCommand "smithy-cli-validate-test" { } ''
|
|
${lib.getExe finalAttrs.finalPackage} validate ${writeText "example.smithy" ''
|
|
$version: "2.0"
|
|
namespace example
|
|
service ExampleService {
|
|
version: "2023-01-01"
|
|
operations: [GetUser]
|
|
}
|
|
operation GetUser {
|
|
input: GetUserInput
|
|
output: GetUserOutput
|
|
}
|
|
structure GetUserInput {
|
|
@required
|
|
userId: String
|
|
}
|
|
structure GetUserOutput {
|
|
@required
|
|
name: String
|
|
}
|
|
''}
|
|
touch $out
|
|
'';
|
|
};
|
|
|
|
meta = {
|
|
description = "CLI for the Smithy interface definition language (IDL)";
|
|
homepage = "https://smithy.io/";
|
|
changelog = "https://github.com/smithy-lang/smithy/releases/tag/${finalAttrs.version}";
|
|
sourceProvenance = with lib.sourceTypes; [
|
|
fromSource
|
|
binaryBytecode # deps
|
|
];
|
|
license = lib.licenses.asl20;
|
|
mainProgram = "smithy";
|
|
maintainers = [ lib.maintainers.joshgodsiff ];
|
|
platforms = lib.platforms.unix;
|
|
};
|
|
})
|