Ajout d'un volume pour le fichier de configuration pour permettre la persistence des paramètres
This commit is contained in:
parent
faa98ec9c4
commit
3724b3bcea
|
@ -8,6 +8,7 @@
|
||||||
gradle/
|
gradle/
|
||||||
build/
|
build/
|
||||||
logs/
|
logs/
|
||||||
|
config/
|
||||||
data/
|
data/
|
||||||
dokka/
|
dokka/
|
||||||
dist/
|
dist/
|
||||||
|
|
|
@ -81,4 +81,4 @@ deploy:
|
||||||
script:
|
script:
|
||||||
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker stop $DEPLOYED_CONTAINER_NAME || true && docker rm $DEPLOYED_CONTAINER_NAME || true"
|
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker stop $DEPLOYED_CONTAINER_NAME || true && docker rm $DEPLOYED_CONTAINER_NAME || true"
|
||||||
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && docker pull $CI_REGISTRY_IMAGE_BACKEND"
|
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY && docker pull $CI_REGISTRY_IMAGE_BACKEND"
|
||||||
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker run -d -p $PORT:$PORT --name=$DEPLOYED_CONTAINER_NAME -v $DATA_VOLUME:/usr/bin/cre/data -e spring_profiles_active=$SPRING_PROFILES $CI_REGISTRY_IMAGE_BACKEND"
|
- ssh -p $DEPLOYMENT_SERVER_SSH_PORT $DEPLOYMENT_SERVER_USERNAME@$DEPLOYMENT_SERVER "docker run -d -p $PORT:$PORT --name=$DEPLOYED_CONTAINER_NAME -v $DATA_VOLUME:/usr/bin/cre/data -v $CONFIG_VOLUME:/usr/bin/cre/config -e spring_profiles_active=$SPRING_PROFILES $CI_REGISTRY_IMAGE_BACKEND"
|
||||||
|
|
|
@ -17,5 +17,6 @@ ENV spring_datasource_username=root
|
||||||
ENV spring_datasource_password=pass
|
ENV spring_datasource_password=pass
|
||||||
|
|
||||||
VOLUME /usr/bin/cre/data
|
VOLUME /usr/bin/cre/data
|
||||||
|
VOLUME /usr/bin/cre/config
|
||||||
|
|
||||||
ENTRYPOINT ["java", "-jar", "ColorRecipesExplorer.jar"]
|
ENTRYPOINT ["java", "-jar", "ColorRecipesExplorer.jar"]
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package dev.fyloz.colorrecipesexplorer.config
|
package dev.fyloz.colorrecipesexplorer.config
|
||||||
|
|
||||||
|
import dev.fyloz.colorrecipesexplorer.config.properties.CreProperties
|
||||||
import dev.fyloz.colorrecipesexplorer.model.ConfigurationType
|
import dev.fyloz.colorrecipesexplorer.model.ConfigurationType
|
||||||
import dev.fyloz.colorrecipesexplorer.model.configuration
|
import dev.fyloz.colorrecipesexplorer.model.configuration
|
||||||
|
import dev.fyloz.colorrecipesexplorer.service.files.create
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@ -10,19 +12,21 @@ import java.io.FileOutputStream
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
const val CONFIGURATION_FILE_PATH = "config.properties"
|
||||||
|
const val CONFIGURATION_FILE_COMMENT = "---Color Recipes Explorer configuration---"
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
class ConfigurationsInitializer {
|
class ConfigurationsInitializer(
|
||||||
|
private val creProperties: CreProperties
|
||||||
|
) {
|
||||||
@Bean
|
@Bean
|
||||||
fun fileConfiguration() = FileConfiguration()
|
fun fileConfiguration() = FileConfiguration("${creProperties.configDirectory}/$CONFIGURATION_FILE_PATH")
|
||||||
}
|
}
|
||||||
|
|
||||||
const val FILE_CONFIGURATION_PATH = "config.properties"
|
class FileConfiguration(private val configFilePath: String) {
|
||||||
const val FILE_CONFIGURATION_COMMENT = "---Color Recipes Explorer configuration---"
|
|
||||||
|
|
||||||
class FileConfiguration {
|
|
||||||
val properties = Properties().apply {
|
val properties = Properties().apply {
|
||||||
with(File(FILE_CONFIGURATION_PATH)) {
|
with(File(configFilePath)) {
|
||||||
if (!this.exists()) this.createNewFile()
|
if (!this.exists()) this.create()
|
||||||
FileInputStream(this).use {
|
FileInputStream(this).use {
|
||||||
this@apply.load(it)
|
this@apply.load(it)
|
||||||
}
|
}
|
||||||
|
@ -45,8 +49,8 @@ class FileConfiguration {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun save() {
|
fun save() {
|
||||||
FileOutputStream(FILE_CONFIGURATION_PATH).use {
|
FileOutputStream(configFilePath).use {
|
||||||
properties.store(it, FILE_CONFIGURATION_COMMENT)
|
properties.store(it, CONFIGURATION_FILE_COMMENT)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,14 @@ package dev.fyloz.colorrecipesexplorer.config.properties
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties
|
import org.springframework.boot.context.properties.ConfigurationProperties
|
||||||
|
|
||||||
|
const val DEFAULT_DATA_DIRECTORY = "data"
|
||||||
|
const val DEFAULT_CONFIG_DIRECTORY = "config"
|
||||||
|
const val DEFAULT_DEPLOYMENT_URL = "http://localhost"
|
||||||
|
|
||||||
@ConfigurationProperties(prefix = "cre.server")
|
@ConfigurationProperties(prefix = "cre.server")
|
||||||
class CreProperties {
|
class CreProperties {
|
||||||
var workingDirectory: String = "data"
|
var dataDirectory: String = DEFAULT_DATA_DIRECTORY
|
||||||
var deploymentUrl: String = "http://localhost"
|
var configDirectory: String = DEFAULT_CONFIG_DIRECTORY
|
||||||
|
var deploymentUrl: String = DEFAULT_DEPLOYMENT_URL
|
||||||
var cacheGeneratedFiles: Boolean = false
|
var cacheGeneratedFiles: Boolean = false
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ class FileServiceImpl(
|
||||||
.firstOrNull { this.contains(it) }
|
.firstOrNull { this.contains(it) }
|
||||||
?.let { throw InvalidFilePathException(this, it) }
|
?.let { throw InvalidFilePathException(this, it) }
|
||||||
|
|
||||||
return FilePath("${creProperties.workingDirectory}/$this")
|
return FilePath("${creProperties.dataDirectory}/$this")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareWrite(path: String, overwrite: Boolean, op: File.() -> Unit) {
|
private fun prepareWrite(path: String, overwrite: Boolean, op: File.() -> Unit) {
|
||||||
|
|
|
@ -14,7 +14,7 @@ import kotlin.test.assertFalse
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
private val creProperties = CreProperties().apply {
|
private val creProperties = CreProperties().apply {
|
||||||
workingDirectory = "data"
|
dataDirectory = "data"
|
||||||
deploymentUrl = "http://localhost"
|
deploymentUrl = "http://localhost"
|
||||||
}
|
}
|
||||||
private const val mockFilePath = "existingFile"
|
private const val mockFilePath = "existingFile"
|
||||||
|
@ -31,7 +31,7 @@ private class FileServiceTestContext {
|
||||||
every { isFile } returns true
|
every { isFile } returns true
|
||||||
every { toPath() } returns mockFilePathPath
|
every { toPath() } returns mockFilePathPath
|
||||||
}
|
}
|
||||||
val mockFileFullPath = spyk(FilePath("${creProperties.workingDirectory}/$mockFilePath")) {
|
val mockFileFullPath = spyk(FilePath("${creProperties.dataDirectory}/$mockFilePath")) {
|
||||||
every { file } returns mockFile
|
every { file } returns mockFile
|
||||||
|
|
||||||
with(fileService) {
|
with(fileService) {
|
||||||
|
@ -266,7 +266,7 @@ class FileServiceTest {
|
||||||
with(fileService) {
|
with(fileService) {
|
||||||
val fullFilePath = mockFilePath.fullPath()
|
val fullFilePath = mockFilePath.fullPath()
|
||||||
|
|
||||||
assertEquals("${creProperties.workingDirectory}/$mockFilePath", fullFilePath.path)
|
assertEquals("${creProperties.dataDirectory}/$mockFilePath", fullFilePath.path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue