diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Babashka.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Babashka.kt index 64e1cae..0cee166 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Babashka.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Babashka.kt @@ -8,15 +8,15 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFrom fun Prov.installBabashka( version: String = "1.12.196", - enforceVersion: Boolean = false, - sha256sum: String = "13c197bf1151cac038abedfa2869a27303f62650474f334867264e13ee9f8cd6" + reInstall: Boolean = false, + sha256sum: String = "18dbf47c79cc136fe9903642a7b0c9ab75f52282984197855b489b80469b8d8f" ) = taskWithResult { - if (checkCommand("bb") && !enforceVersion) { + if (checkCommand("bb") && !reInstall) { return@taskWithResult ProvResult(true) } if (checkBabashkaVersion(version)) { - return@taskWithResult ProvResult(true, out = "Version $version of babashka is already installed.") + return@taskWithResult ProvResult(true, info = "Babashka $version is already installed.") } val downloadUrl = "https://github.com/babashka/babashka/releases/download/v$version/babashka-$version-linux-amd64.tar.gz" @@ -30,7 +30,7 @@ fun Prov.installBabashka( ) if (result.success) { - cmd("tar -C /usr/local/bin/ -xzf $target/go1.23.5.linux-amd64.tar.gz --no-same-owner", sudo = true) + cmd("tar -C /usr/local/bin/ -xzf $target/babashka-$version-linux-amd64.tar.gz --no-same-owner", sudo = true) deleteFile("$target/$filename") // check and assert installation @@ -46,6 +46,6 @@ fun Prov.checkBabashkaVersion(version: String): Boolean { } internal fun Prov.babashkaVersion(): String? { - val result = cmdNoEval("/usr/local/bb version") + val result = cmdNoEval("/usr/local/bin/bb version") return if (!result.success) null else result.out } \ No newline at end of file diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOps.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOps.kt index b99081e..2e80b32 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOps.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOps.kt @@ -158,20 +158,19 @@ fun Prov.installTerraform() = task { cmd("ln -s " + dir + "bin/* /usr/local/bin", sudo = true) } cmd("tfenv install", sudo = true) - cmd("tfenv install latest:^1.4.6", sudo = true) - cmd("tfenv use latest:^1.4.6", sudo = true) + cmd("tfenv install latest:^1.4.7", sudo = true) + cmd("tfenv use latest:^1.4.7", sudo = true) } fun Prov.installDirenv() = taskWithResult { val bashConfigFile = "~/.bashrc.d/direnv.sh" if (!checkFile(bashConfigFile) && !checkPackage("direnv")) { aptInstall("direnv") - val content = """ - eval "$(direnv hook bash)" - """ + "\n".trimIndent() + val content = """eval "$(direnv hook bash)" +""" + "\n".trimIndent() createFile(bashConfigFile, content) addResult(checkPackage("direnv"), info = "direnv has been installed.") } else { - return@taskWithResult ProvResult(true, out = "direnv or ~/.bashrc.d/direnv.sh already installed") + return@taskWithResult ProvResult(true, info = "direnv or ~/.bashrc.d/direnv.sh already installed") } } \ No newline at end of file diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Go.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Go.kt index af0e1a2..3ecfe50 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Go.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Go.kt @@ -9,15 +9,15 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFrom //from https://go.dev/dl/ fun Prov.installGo( version: String = "1.23.5", - enforceVersion: Boolean = false, + reInstall: Boolean = false, sha256sum: String = "cbcad4a6482107c7c7926df1608106c189417163428200ce357695cc7e01d091" ) = taskWithResult { - if (checkCommand("go") && !enforceVersion) { + if (checkCommand("go") && !reInstall) { return@taskWithResult ProvResult(true) } if (checkGoVersion(version)) { - return@taskWithResult ProvResult(true, out = "Version $version of go is already installed.") + return@taskWithResult ProvResult(true, out = "Go $version is already installed.") } val downloadUrl = "https://go.dev/dl/go$version.linux-amd64.tar.gz" @@ -38,7 +38,7 @@ fun Prov.installGo( val content = "export PATH=\$PATH:/usr/local/go/bin\n" createFile(bashConfigFile, content) // check and assert installation - addResult(checkGoVersion(version), info = "Go version $version has been installed.") + addResult(checkGoVersion(version), info = "Go $version has been installed.") } else { return@taskWithResult ProvResult(false, err = "Go $version could not be downloaded and installed. " + result.err) } diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Gopass.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Gopass.kt index 1f6ae23..e719ecc 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Gopass.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Gopass.kt @@ -12,16 +12,16 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFrom fun Prov.installGopass( version: String = "1.15.13", // NOTE: when adjusting, pls also adjust checksum below and version of gopass bridge json api - enforceVersion: Boolean = false, + reInstall: Boolean = false, // from https://github.com/gopasspw/gopass/releases/tag/v1.15.13 sha256sum: String = "409ed5617e64fa2c781d5e2807ba7fcd65bc383a4e110f410f90b590e51aec55" ) = taskWithResult { - if (checkPackage("gopass") && !enforceVersion) { + if (checkPackage("gopass") && !reInstall) { return@taskWithResult ProvResult(true) } if (checkGopassVersion(version)) { - return@taskWithResult ProvResult(true, out = "Version $version of gopass is already installed.") + return@taskWithResult ProvResult(true, out = "Gopass $version is already installed.") } val path = "tmp" diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridge.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridge.kt index 25cb60c..7e45e91 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridge.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridge.kt @@ -4,7 +4,7 @@ import org.domaindrivenarchitecture.provs.framework.core.Prov import org.domaindrivenarchitecture.provs.framework.core.ProvResult import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.* import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInstall -import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.isPackageInstalled +import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.checkPackage import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL @@ -53,7 +53,7 @@ fun Prov.installGopassJsonApi() = taskWithResult { } } else { if (installedJsonApiVersion.startsWith("gopass-jsonapi version $gopassJsonApiVersion")) { - ProvResult(true, out = "Version $gopassJsonApiVersion of gopass-jsonapi is already installed") + ProvResult(true, info = "Gopass-jsonapi $gopassJsonApiVersion is already installed") } else { ProvResult( false, @@ -85,7 +85,7 @@ fun Prov.configureApparmorForGopassWrapperShForFirefox() = task { } fun Prov.configureGopassJsonApi() = taskWithResult { - if (isPackageInstalled("gopass-jsonapi")) { + if (checkPackage("gopass-jsonapi")) { // configures gopass-jsonapi for firefox and chooses default for each: // * "Install for all users? [y/N/q]", // * "In which path should gopass_wrapper.sh be installed? [/home/<user>/.config/gopass]" diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvm.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvm.kt index 74bffdb..2e09a4a 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvm.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvm.kt @@ -23,10 +23,9 @@ fun Prov.installNpmByNvm(version: String = "0.40.1"): ProvResult = task { // configure bash - create file ".bashrc.d/npmbynvm.sh" with settings configureBashForUser() - val content = """ - export NVM_DIR="${userHome()}.nvm" - [ -s "${"\$NVM_DIR/nvm.sh"}" ] && \. "${"\$NVM_DIR/nvm.sh"}" - """ + "\n".trimIndent() + val content = """export NVM_DIR="${userHome()}.nvm" +[ -s "${"\$NVM_DIR/nvm.sh"}" ] && \. "${"\$NVM_DIR/nvm.sh"}" +""" + "\n".trimIndent() createFile(bashConfigFile, content) // install Node.js and NPM diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Opentofu.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Opentofu.kt index 6a0ad02..7c5083d 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Opentofu.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Opentofu.kt @@ -8,32 +8,31 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInsta import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.checkPackage fun Prov.installOpentofu( - enforceVersion: Boolean = false + reInstall: Boolean = false ) = taskWithResult { - if (checkCommand("tofu -version") && !enforceVersion) { - val versionInst = cmd("tofu -version").toString() - return@taskWithResult ProvResult(true, out = "Opentofu v$versionInst is already installed.") + if (checkCommand("tofu -version") && !reInstall) { + val versionInst = cmd("tofu -version").out + return@taskWithResult ProvResult(true, info = "Opentofu v$versionInst is already installed.") } - val pathKeyrings = "/etc/apt/keyrings" - - val result = checkDir(pathKeyrings) + val result = checkDir("/etc/apt/keyrings") if (result) { cmd("curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg > /dev/null") cmd("curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey/ | sudo gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg > /dev/null") cmd("chmod a+r /etc/apt/keyrings/opentofu.gpg /etc/apt/keyrings/opentofu-repo.gpg", sudo = true) - val TofuListFile = "/etc/apt/sources.list.d/opentofu.list" - val content = """deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main""" + "\n" + - """deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main""" + "\n" + - "".trimIndent() - createFile(TofuListFile, content, sudo = true) + val tofuListFile = "/etc/apt/sources.list.d/opentofu.list" + val content = + """deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main""" + "\n" + + """deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main""" + "\n" + + "".trimIndent() + createFile(tofuListFile, content, sudo = true) cmd("sudo apt-get update -q=2") aptInstall("tofu") addResult(checkPackage("tofu"), info = "Opentofu has been installed.") - }else { + } else { return@taskWithResult ProvResult(false, err = "Opentofu could not be downloaded and installed. ") } } diff --git a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Terragrunt.kt b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Terragrunt.kt index 784a387..3ccb65b 100644 --- a/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Terragrunt.kt +++ b/src/main/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/Terragrunt.kt @@ -8,15 +8,15 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFrom fun Prov.installTerragrunt( version: String = "0.72.6", - enforceVersion: Boolean = false, + reInstall: Boolean = false, sha256sum: String = "df63a41576b8b4129b498da5b698b5792a5a228ea5012bbecdcbe49d4d662be3" ) = taskWithResult { - if (checkCommand("terragrunt") && !enforceVersion) { + if (checkCommand("terragrunt") && !reInstall) { return@taskWithResult ProvResult(true) } if (checkTerragruntVersion(version)) { - return@taskWithResult ProvResult(true, out = "Terragrunt is already installed.") + return@taskWithResult ProvResult(true, info = "Terragrunt is already installed.") } val downloadUrl = "https://github.com/gruntwork-io/terragrunt/releases/download/v$version/terragrunt_linux_amd64" @@ -30,12 +30,8 @@ fun Prov.installTerragrunt( ) if (result.success) { - cmd("sudo cp $target/$filename /usr/local/bin/terragrunt", sudo = true) + cmd("sudo mv $target/$filename /usr/local/bin/terragrunt", sudo = true) cmd("chmod 755 /usr/local/bin/terragrunt", sudo = true) - cmd("chown root /usr/local/bin/terragrunt", sudo = true) - cmd("chgrp root /usr/local/bin/terragrunt", sudo = true) - deleteFile("$target/$filename") - configureBashForUser() // check and assert installation addResult(checkTerragruntVersion(version), info = "Terragrunt version $version has been installed.") } else { diff --git a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/BabashkaKtTest.kt b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/BabashkaKtTest.kt index 7d3ac0f..9244ec8 100644 --- a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/BabashkaKtTest.kt +++ b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/BabashkaKtTest.kt @@ -4,17 +4,17 @@ import org.domaindrivenarchitecture.provs.test.defaultTestContainer import org.domaindrivenarchitecture.provs.test.tags.ExtensiveContainerTest import org.junit.jupiter.api.Assertions.assertTrue - class BabashkaKtTest { +class BabashkaKtTest { -@ExtensiveContainerTest + @ExtensiveContainerTest fun installBabashka() { // given val prov = defaultTestContainer() // when val res = prov.task { - installGo() - installGo() // check repeatability + installBabashka() + installBabashka() // check repeatability } // then diff --git a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOpsKtTest.kt b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOpsKtTest.kt index f3a9f91..41385fa 100644 --- a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOpsKtTest.kt +++ b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/DevOpsKtTest.kt @@ -1,6 +1,7 @@ package org.domaindrivenarchitecture.provs.desktop.infrastructure import org.domaindrivenarchitecture.provs.framework.core.getResourceAsText +import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInstall import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.* import org.domaindrivenarchitecture.provs.test.defaultTestContainer import org.domaindrivenarchitecture.provs.test.tags.ExtensiveContainerTest @@ -59,7 +60,23 @@ internal class DevOpsKtTest { assertTrue(prov.checkFile("/usr/local/bin/kubeconform")) } - @ExtensiveContainerTest + @ExtensiveContainerTest + fun installTerraform() { + // given + val prov = defaultTestContainer() + + // when + val res = prov.task { + aptInstall("git curl unzip") + installTerraform() + installTerraform() // check repeatability + } + + // then + assertTrue(res.success) + } + + @ExtensiveContainerTest fun installDirenv() { // given val prov = defaultTestContainer() @@ -72,6 +89,5 @@ internal class DevOpsKtTest { // then assertTrue(res.success) - //assertTrue(prov.checkFile("/usr/local/bin/kubeconform")) } } diff --git a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridgeKtTest.kt b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridgeKtTest.kt index fe90a29..91a40b8 100644 --- a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridgeKtTest.kt +++ b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/GopassBridgeKtTest.kt @@ -72,7 +72,7 @@ internal class GopassBridgeKtTest { trust = true, skipIfExistin = false ) - installGopass("1.11.0", enforceVersion = true, "1ec9e0dfcfd9bcc241943e1a7d92f31bf3e66bb16f61ae5d079981325c31baa6") + installGopass("1.11.0", reInstall = true, "1ec9e0dfcfd9bcc241943e1a7d92f31bf3e66bb16f61ae5d079981325c31baa6") configureGopass(publicGpgKey = Secret(publicGPGSnakeoilKey())) } assertTrue(preparationResult.success) @@ -100,7 +100,7 @@ internal class GopassBridgeKtTest { trust = true, skipIfExistin = false ) - installGopass("1.9.0", enforceVersion = true, "fe13ef810d7fe200495107161e99eac081368aa0ce5e53971b1bd47a64eba4db") + installGopass("1.9.0", reInstall = true, "fe13ef810d7fe200495107161e99eac081368aa0ce5e53971b1bd47a64eba4db") configureGopass(publicGpgKey = Secret(publicGPGSnakeoilKey())) } assertTrue(preparationResult.success) diff --git a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvmKtTest.kt b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvmKtTest.kt index d506c0a..a4fc42d 100644 --- a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvmKtTest.kt +++ b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/NpmByNvmKtTest.kt @@ -1,5 +1,6 @@ package org.domaindrivenarchitecture.provs.desktop.infrastructure +import org.domaindrivenarchitecture.provs.framework.core.processors.ContainerStartMode import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInstall import org.domaindrivenarchitecture.provs.test.defaultTestContainer import org.domaindrivenarchitecture.provs.test.tags.ContainerTest @@ -10,7 +11,7 @@ internal class NpmByNvmKtTest { @ContainerTest fun installNpmByNvm() { // given - val prov = defaultTestContainer() + val prov = defaultTestContainer(ContainerStartMode.CREATE_NEW_KILL_EXISTING) prov.aptInstall("curl") // when diff --git a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/TerragruntKtTest.kt b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/TerragruntKtTest.kt index 98215da..00339aa 100644 --- a/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/TerragruntKtTest.kt +++ b/src/test/kotlin/org/domaindrivenarchitecture/provs/desktop/infrastructure/TerragruntKtTest.kt @@ -6,15 +6,15 @@ import org.junit.jupiter.api.Assertions.assertTrue class TerragruntKtTest { - @ExtensiveContainerTest + @ExtensiveContainerTest fun installTerragrunt() { // given val prov = defaultTestContainer() // when val res = prov.task { - installOpentofu() - installOpentofu() // check repeatability + installTerragrunt() + installTerragrunt() // check repeatability } // then