#!/bin/bash set -eux . /vagrant/provision/nexus-groovy.sh mkdir -p tmp && cd tmp # # test the NuGet repository. # see https://books.sonatype.com/nexus-book/3.0/reference/nuget.html if ! which mono; then sudo apt-get install -y mono-complete fi if [[ ! -f /tmp/nuget.exe ]]; then wget -qO/tmp/nuget.exe https://dist.nuget.org/win-x86-commandline/latest/nuget.exe fi function nuget { mono /tmp/nuget.exe $* } nuget_source_url=http://localhost:8081/repository/nuget-group/ nuget_source_push_url=http://localhost:8081/repository/nuget-hosted/ nuget_source_push_api_key=$(nexus-groovy get-jenkins-nuget-api-key | jq -r '.result | fromjson | .apiKey') # test installing a package from the public NuGet repository. nuget install MsgPack -Source $nuget_source_url # test publishing a package. cat <<'EOF' >example-hello-world.nuspec example-hello-world 1.0.0 Alice Doe Bob Doe http://choosealicense.com/licenses/mit/ http://example.com false Example Package Description Hello World. Copyleft Alice Doe hello world EOF cat <<'EOF' >MESSAGE.md # Hello World Hey Ho Let's Go! EOF nuget pack example-hello-world.nuspec nuget push example-hello-world.1.0.0.nupkg -Source $nuget_source_push_url -ApiKey $nuget_source_push_api_key # test installing it back. rm -rf test && mkdir test && pushd test nuget install example-hello-world -Source $nuget_source_url if [[ ! -f example-hello-world.1.0.0/content/MESSAGE.md ]]; then echo 'the package did not install as expected' exit 1 fi popd # # test the maven repository. # install maven and the java development kit. sudo apt-get install -y maven sudo apt-get install -y default-jdk sudo apt-get install -y xmlstarlet # setup the user maven configuration to use nexus as a mirror the # official maven repository. # see https://books.sonatype.com/nexus-book/3.0/reference/maven.html # see https://maven.apache.org/guides/mini/guide-mirror-settings.html mkdir -p ~/.m2 cat <<'EOF' >~/.m2/settings.xml nexus alice.doe password nexus central http://localhost:8081/repository/maven-public/ nexus central http://central true true central http://central true true nexus EOF # test our nexus repository by creating an hello world project, which # will pull from our nexus repository. mvn \ archetype:generate \ -DgroupId=com.example.helloworld \ -DartifactId=example-helloworld \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DinteractiveMode=false # test publishing a package. pushd example-helloworld # add the nexus repository to pom.xml. xmlstarlet ed --inplace -N pom=http://maven.apache.org/POM/4.0.0 \ --subnode '/pom:project' \ --type elem \ --name distributionManagement \ --value '@@repositories@@' \ pom.xml python -c ' xml = open("pom.xml").read().replace("@@repositories@@", """ nexus Releases http://localhost:8081/repository/maven-releases nexus Snapshot http://localhost:8081/repository/maven-snapshots """) open("pom.xml", "w").write(xml) ' # deploy. mvn deploy popd # # test the raw repository. apt-get install -y curl # upload. # see https://books.sonatype.com/nexus-book/3.0/reference/raw.html#_uploading_files_to_hosted_raw_repositories expected='this is an adhoc package' echo "$expected" >package-1.0.0.txt curl --silent --user 'admin:admin123' --upload-file package-1.0.0.txt http://localhost:8081/repository/adhoc-package/package-1.0.0.txt # download. actual=$(curl --silent http://localhost:8081/repository/adhoc-package/package-1.0.0.txt) [ "$actual" = "$expected" ] || (echo 'upload adhoc package test failed' && false)