Compare commits
4 commits
7307e39ff6
...
a336838af8
Author | SHA1 | Date | |
---|---|---|---|
a336838af8 | |||
6a0027fb64 | |||
494e1bd8d6 | |||
49ec8462f0 |
3 changed files with 133 additions and 0 deletions
|
@ -156,6 +156,7 @@ fun Prov.provisionIdeDesktop() {
|
|||
installShadowCljs()
|
||||
installDevOps()
|
||||
provisionPython()
|
||||
installHugoByDeb()
|
||||
|
||||
// IDEs
|
||||
installVSC("python", "clojure")
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
package org.domaindrivenarchitecture.provs.desktop.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
||||
import org.domaindrivenarchitecture.provs.framework.core.ProvResult
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.createDir
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.userHome
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInstall
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptPurge
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL
|
||||
|
||||
fun Prov.installHugoByDeb() = taskWithResult {
|
||||
val sha256sum = "46692ac9b79d5bc01b0f847f6dcf651d8630476de63e598ef61a8da9461d45cd"
|
||||
val requiredHugoVersion = "0.125.5"
|
||||
val filename = "hugo_extended_0.125.5_linux-amd64.deb"
|
||||
val downloadUrl = "-L https://github.com/gohugoio/hugo/releases/download/v$requiredHugoVersion/$filename"
|
||||
val downloadDir = "${userHome()}Downloads"
|
||||
val currentHugoVersion = cmdNoEval("hugo version").out
|
||||
|
||||
if (needsHugoInstall(currentHugoVersion, requiredHugoVersion)) {
|
||||
if (isHugoInstalled(currentHugoVersion)) {
|
||||
if (currentHugoVersion!!.contains("snap")) {
|
||||
cmd("snap remove hugo", sudo = true)
|
||||
} else {
|
||||
aptPurge("hugo")
|
||||
}
|
||||
}
|
||||
aptInstall("gnupg2")
|
||||
createDir(downloadDir)
|
||||
downloadFromURL(downloadUrl, filename, downloadDir, sha256sum = sha256sum)
|
||||
cmd("dpkg -i $downloadDir/$filename", sudo = true)
|
||||
} else {
|
||||
ProvResult(true)
|
||||
}
|
||||
}
|
||||
|
||||
fun needsHugoInstall(currentHugoVersion: String?, requiredHugoVersion: String) : Boolean {
|
||||
if (currentHugoVersion == null) {
|
||||
return true
|
||||
}
|
||||
if (!isHugoInstalled(currentHugoVersion)) {
|
||||
return true
|
||||
}
|
||||
if (!isHugoExtended(currentHugoVersion)) {
|
||||
return true
|
||||
}
|
||||
if (isLowerHugoVersion(requiredHugoVersion, currentHugoVersion)) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun isHugoInstalled(hugoVersion: String?) : Boolean {
|
||||
if (hugoVersion == null) {
|
||||
return false
|
||||
}
|
||||
return hugoVersion.contains("hugo")
|
||||
}
|
||||
|
||||
fun isHugoExtended(hugoVersion: String) : Boolean {
|
||||
return hugoVersion.contains("extended")
|
||||
}
|
||||
|
||||
fun isLowerHugoVersion(requiredHugoVersion: String, currentHugoVersion: String ) : Boolean {
|
||||
val reqVersionNo = getHugoVersionNo(requiredHugoVersion)
|
||||
val currentVersionNo = getHugoVersionNo(currentHugoVersion)
|
||||
return when {
|
||||
compareVersions(currentVersionNo, reqVersionNo).contains("lower") -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
fun compareVersions(firstVersion : List<Int>, secondVersion: List<Int>) : String {
|
||||
var result = ""
|
||||
for (i in 0..2) {
|
||||
when {
|
||||
firstVersion[i] > secondVersion[i] -> result += " higher"
|
||||
firstVersion[i] < secondVersion[i] -> result += " lower"
|
||||
firstVersion[i] == secondVersion[i] -> result += " equal"
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
fun getHugoVersionNo(hugoVersion: String) : List<Int> {
|
||||
// hugo v0.126.1-3d40ab+extended linux/amd64 BuildDate=2024-05-15T10:42:34Z VendorInfo=snap:0.126.1
|
||||
var result = hugoVersion.split(" ")[1]
|
||||
result = result.split("-")[0].removePrefix("v")
|
||||
return result.split(".").map { it.toInt() }
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package org.domaindrivenarchitecture.provs.desktop.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.docker.exitAndRmContainer
|
||||
import org.domaindrivenarchitecture.provs.framework.core.local
|
||||
import org.domaindrivenarchitecture.provs.test.defaultTestContainer
|
||||
import org.domaindrivenarchitecture.provs.test.tags.ExtensiveContainerTest
|
||||
import org.junit.jupiter.api.Assertions.assertFalse
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
internal class HugoTest {
|
||||
@ExtensiveContainerTest
|
||||
fun test_installHugoByDeb() {
|
||||
// given
|
||||
local().exitAndRmContainer("provs_test")
|
||||
val prov = defaultTestContainer()
|
||||
|
||||
// when
|
||||
val res = prov.installHugoByDeb()
|
||||
|
||||
// then
|
||||
assertTrue(res.success)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun test_needsHugoInstall() {
|
||||
// given
|
||||
val hugoNull = null
|
||||
val hugoLow = "hugo v0.0.0-abc+extended linux/amd64 BuildDate=0000-00-00 VendorInfo=snap:0.0.0"
|
||||
val hugoMajHigh = "hugo v1.0.0-abc+extended linux/amd64 BuildDate=0000-00-00 VendorInfo=snap:1.0.0"
|
||||
val hugoMinHigh = "hugo v0.1.0-abc+extended linux/amd64 BuildDate=0000-00-00 VendorInfo=snap:0.1.0"
|
||||
val hugoPatHigh = "hugo v0.0.1-abc+extended linux/amd64 BuildDate=0000-00-00 VendorInfo=snap:0.0.1"
|
||||
|
||||
assertTrue(needsHugoInstall(hugoNull, hugoPatHigh))
|
||||
assertTrue(needsHugoInstall(hugoLow, hugoPatHigh))
|
||||
assertTrue(needsHugoInstall(hugoLow, hugoMinHigh))
|
||||
assertTrue(needsHugoInstall(hugoLow, hugoMajHigh))
|
||||
assertFalse(needsHugoInstall(hugoMajHigh, hugoLow))
|
||||
assertFalse(needsHugoInstall(hugoMinHigh, hugoLow))
|
||||
assertFalse(needsHugoInstall(hugoPatHigh, hugoLow))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue