This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
dagger/stdlib/java/maven/maven.cue

70 lines
1.5 KiB
CUE
Raw Normal View History

// Maven is a build automation tool for Java
package maven
import (
"strings"
"alpha.dagger.io/dagger"
"alpha.dagger.io/alpine"
"alpha.dagger.io/os"
)
// A Maven project
#Project: {
// Application source code
source: dagger.#Artifact @dagger(input)
// Extra alpine packages to install
package: {
[string]: true | false | string
} @dagger(input)
// Environment variables
env: {
[string]: string
} @dagger(input)
phases: [...string] | *["package"] @dagger(input)
goals: [...string] | *[] @dagger(input)
// Optional arguments for the script
args: [...string] | *[] @dagger(input)
// Build output directory
build: os.#Dir & {
from: ctr
path: "/build"
} @dagger(output)
ctr: os.#Container & {
image: alpine.#Image & {
"package": package & {
bash: "=~5.1"
openjdk11: "=~11.0.9"
maven: "=~3.6.3"
}
}
shell: path: "/bin/bash"
command: """
opts=( $(echo $MAVEN_ARGS) )
mvn $MAVEN_GOALS $MAVEN_PHASES ${opts[@]}
result=$?
modules=$(mvn -Dexec.executable='pwd' -Dexec.args='${project.artifactId}' exec:exec -q)
for module in $modules;do
source=$(echo "$module/target" | tr -s /)
target=$(echo "/build/$module" | tr -s /)
mkdir -p $target;cp -a $source $target 2>/dev/null || :
done
exit $result
"""
"env": env & {
MAVEN_ARGS: strings.Join(args, "\n")
MAVEN_PHASES: strings.Join(phases, "\n")
MAVEN_GOALS: strings.Join(goals, "\n")
}
dir: "/"
copy: "/": from: source
}
}