diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..4d23f97 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,16 @@ +name: CI +on: + push: + branches: [ master ] +jobs: + "Build wildfly docker images": + runs-on: hostinger + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + - name: Execute Gradle build + env: + PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }} + run: ./gradlew build publish dockerPushImage diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..32197c7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM tomcat:jdk21 + +COPY ./jsf-playground-*.war /usr/local/tomcat/webapps/jsf-playground.war diff --git a/build.gradle b/build.gradle index c23b20b..027a118 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,18 @@ plugins { alias(catalog.plugins.lombok) apply false alias(catalog.plugins.sambal) + alias(catalog.plugins.gradle.docker) + id 'java-library' id 'war' id 'maven-publish' } +import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage +import com.bmuschko.gradle.docker.tasks.image.DockerPushImage +import com.bmuschko.gradle.docker.tasks.container.DockerCreateContainer +import com.bmuschko.gradle.docker.tasks.container.DockerStartContainer +import com.bmuschko.gradle.docker.tasks.container.DockerStopContainer + allprojects { pluginManager.withPlugin('java-library') { @@ -60,3 +68,46 @@ dependencies { implementation catalog.log4j.slf4j2.impl } +Provider prepareDockerBuild = tasks.register('prepareDockerBuild', Copy) { + group = 'docker' + into project.layout.buildDirectory.file('docker') + from(tasks.war) + from(file('Dockerfile')) +} + +Provider dockerBuild = tasks.register('dockerBuildImage', DockerBuildImage) { + group = 'docker' + dependsOn(prepareDockerBuild) + images.add('gitea.woggioni.net/woggioni/jsf-playground:latest') + images.add("gitea.woggioni.net/woggioni/jsf-playground:${version}") +} + +Provider dockerPush = tasks.register('dockerPushImage', DockerPushImage) { + group = 'docker' + dependsOn(dockerBuild) + registryCredentials { + url = getProperty('docker.registry.url') + username = 'woggioni' + password = System.getenv().get("PUBLISHER_TOKEN") + } +} + +Provider dockerCreate = tasks.register('dockerCreateContainer', DockerCreateContainer) { + group = 'docker' + dependsOn(dockerBuild) + targetImageId(dockerBuild.flatMap { it.imageId }) + hostConfig.portBindings = ['127.0.0.1:8888:8080'] + hostConfig.autoRemove = true +} + +Provider dockerRun = tasks.register('dockerStartContainer', DockerStartContainer) { + group = 'docker' + dependsOn(dockerCreate) + targetContainerId(dockerCreate.flatMap { it.containerId }) +} + +tasks.register('dockerStopContainer', DockerStopContainer) { + group = 'docker' + dependsOn(dockerRun) + targetContainerId(dockerRun.flatMap { it.containerId }) +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 25fff85..f7f8624 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ gitea.maven.url=https://gitea.woggioni.net/api/packages/woggioni/maven +docker.registry.url=gitea.woggioni.net org.gradle.parallel=true org.gradle.caching=true