diff --git a/.teamcity/kotlinlang/SiteProject.kt b/.teamcity/kotlinlang/SiteProject.kt index 9b8057f9970..7ff342257bd 100644 --- a/.teamcity/kotlinlang/SiteProject.kt +++ b/.teamcity/kotlinlang/SiteProject.kt @@ -8,27 +8,28 @@ import kotlinlang.vcsRoots.WebHelp import templates.DockerImageBuilder object SiteProject : Project({ - name = "kotlinlang.org" + name = "kotlinlang.org" - buildTypesOrder = arrayListOf( - BuildSitePages, - FetchBlogNews, - PdfGenerator, - BuildSearchIndex, - BuildWebHelpFrontend, - BuildKotlinGrammar, - BuildKotlinSpec, - BuildJsAssets, - PageViews, - ) + buildTypesOrder = arrayListOf( + BuildSitePages, + FetchBlogNews, + PdfGenerator, + BuildSearchIndex, + BuildWebHelpFrontend, + BuildKotlinGrammar, + BuildKotlinSpec, + BuildJsAssets, + PageViews, + BuildPythonContainer + ) - buildTypesOrder.forEach { - buildType(it) - } + buildTypesOrder.forEach { + buildType(it) + } - template(DockerImageBuilder) + template(DockerImageBuilder) - vcsRoot(GrammarGenerator) - vcsRoot(KotlinSpec) - vcsRoot(WebHelp) + vcsRoot(GrammarGenerator) + vcsRoot(KotlinSpec) + vcsRoot(WebHelp) }) diff --git a/.teamcity/kotlinlang/builds/BuildPythonContainer.kt b/.teamcity/kotlinlang/builds/BuildPythonContainer.kt new file mode 100644 index 00000000000..b3810259db1 --- /dev/null +++ b/.teamcity/kotlinlang/builds/BuildPythonContainer.kt @@ -0,0 +1,138 @@ +package kotlinlang.builds + +import jetbrains.buildServer.configs.kotlin.BuildType +import jetbrains.buildServer.configs.kotlin.buildFeatures.dockerRegistryConnections +import jetbrains.buildServer.configs.kotlin.buildSteps.DockerCommandStep +import jetbrains.buildServer.configs.kotlin.buildSteps.ScriptBuildStep +import jetbrains.buildServer.configs.kotlin.buildSteps.dockerCommand +import jetbrains.buildServer.configs.kotlin.buildSteps.script + +object BuildPythonContainer: BuildType({ + name = "Build Python Container" + + params { + param("kotlin-website-image", "registry.jetbrains.team/p/aki/kotlin-website/kotlinlang/python:%build.number%") + param("kotlin-website-setup", "/kotlin-website-setup.sh") + param("virtualenv.folder", "/_environment-kotlin-website") + param("kotlin-website-node-version", "lts") + param("env.DOCKER_BUILDKIT", "1") + } + + vcs { + root(vcsRoots.KotlinLangOrg, """ + +:. => . + -:.idea + -:assets + -:data + -:external + -:kotlin-features + -:pages + -:pdf + -:scripts + -:src + -:static + -:templates + -:tests + -:docs + """.trimIndent()) + cleanCheckout = true + showDependenciesChanges = true + } + + steps { + dockerCommand { + name = "Build Image" + commandType = build { + source = content { + content = """ + FROM registry.jetbrains.team/p/aki/kotlin-website/build:v3 + + # Base image content: registry.jetbrains.team/p/aki/kotlin-website/build:v3 + # FROM --platform="linux/amd64" python:3.9 + # ENV DEBIAN_FRONTEND=noninteractive; + # RUN pip install --no-cache-dir virtualenv; + # COPY google-credentials.json /secrets/google-credentials.json + # RUN apt-get update + # RUN apt-get install -y build-essential xorg gdebi + # RUN apt-get -y install ruby + # RUN gem install kramdown -v 1.14.0 + # + # RUN wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \ + # tar xf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && \ + # mv wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf && \ + # chmod +x /usr/local/bin/wkhtmltopdf + + RUN curl -fsSL "https://deb.nodesource.com/setup_%kotlin-website-node-version%.x" | bash + RUN apt-get install -y nodejs + + RUN \ + echo "Initializing infrastructure at %virtualenv.folder%"; \ + virtualenv -p python3 %virtualenv.folder%; + + RUN \ + pip install --upgrade pip + + RUN \ + echo "source %virtualenv.folder%/bin/activate" > %kotlin-website-setup%; \ + chmod +x %kotlin-website-setup% + + ADD requirements.txt /requirements.txt + RUN pip install -r /requirements.txt; rm /requirements.txt + """.trimIndent() + } + platform = DockerCommandStep.ImagePlatform.Linux + namesAndTags = "%kotlin-website-image%" + commandArgs = "--pull" + } + } + script { + name = "Test container" + scriptContent = """ + #!/bin/bash + + echo "setup script:" + cat %kotlin-website-setup% + echo "" + + source %kotlin-website-setup% + + set -e -x -u + + python --version + + pip --version + + node --version + + npm --version + + kramdown --version + """.trimIndent() + dockerImage = "%kotlin-website-image%" + dockerImagePlatform = ScriptBuildStep.ImagePlatform.Linux + } + dockerCommand { + name = "Push image" + commandType = push { + namesAndTags = "%kotlin-website-image%" + } + } + script { + name = "Update build Status" + scriptContent = """ + #!/bin/bash + + echo " ##teamcity[buildStatus text='{build.status.text} %kotlin-website-image%'] " + """.trimIndent() + } + } + + features { + dockerRegistryConnections { + cleanupPushedImages = true + loginToRegistry = on { + dockerRegistryId = "PROJECT_EXT_357" + } + } + } +}) diff --git a/.teamcity/kotlinlang/builds/BuildSitePages.kt b/.teamcity/kotlinlang/builds/BuildSitePages.kt index d4a71a391e6..d8c75abfce6 100644 --- a/.teamcity/kotlinlang/builds/BuildSitePages.kt +++ b/.teamcity/kotlinlang/builds/BuildSitePages.kt @@ -56,7 +56,7 @@ object BuildSitePages : BuildType({ python kotlin-website.py build """.trimIndent() - dockerImage = "%dep.Kotlin_KotlinSites_Builds_KotlinlangOrg_BuildPythonContainer.kotlin-website-image%" + dockerImage = "%dep.Kotlin_KotlinSites_KotlinlangTeamcityDsl_BuildPythonContainer.kotlin-website-image%" dockerImagePlatform = ScriptBuildStep.ImagePlatform.Linux dockerPull = true diff --git a/.teamcity/templates/DockerImageBuilder.kt b/.teamcity/templates/DockerImageBuilder.kt index 4ae790395a5..7e24e2db23e 100644 --- a/.teamcity/templates/DockerImageBuilder.kt +++ b/.teamcity/templates/DockerImageBuilder.kt @@ -1,10 +1,10 @@ package templates -import jetbrains.buildServer.configs.kotlin.AbsoluteId import jetbrains.buildServer.configs.kotlin.FailureAction import jetbrains.buildServer.configs.kotlin.Template import jetbrains.buildServer.configs.kotlin.buildFeatures.dockerRegistryConnections import kotlinlang.builds.BuildKotlinGrammar +import kotlinlang.builds.BuildPythonContainer object DockerImageBuilder : Template({ name = "Site builder docker container" @@ -28,7 +28,7 @@ object DockerImageBuilder : Template({ } dependencies { - snapshot(AbsoluteId("Kotlin_KotlinSites_Builds_KotlinlangOrg_BuildPythonContainer")) { + snapshot(BuildPythonContainer) { onDependencyFailure = FailureAction.FAIL_TO_START onDependencyCancel = FailureAction.CANCEL }