kind: pipeline type: docker name: ci # Enable BuildKit globally (docker plugin will pick this up) environment: DOCKER_BUILDKIT: 1 steps: - name: test-and-jar image: gradle:8.10.2-jdk21 environment: # Put the Gradle cache on a mounted volume GRADLE_USER_HOME: /drone/.gradle volumes: - name: gradle-cache path: /drone/.gradle commands: - gradle --version # Single invocation -> one dependency resolution, better cache reuse - gradle --no-daemon clean test bootJar - name: build-image image: plugins/docker settings: registry: rubble.se:5000 repo: rubble.se:5000/hemhub/api dockerfile: Dockerfile username: from_secret: docker_username password: from_secret: docker_password # Keep your tags as-is tags: - ${DRONE_BRANCH/\//-}-${DRONE_COMMIT_SHA:0:7} - latest # Enable BuildKit and add traceability labels (OCI standard) buildkit: true labels: org.opencontainers.image.source: ${DRONE_GIT_HTTP_URL} org.opencontainers.image.revision: ${DRONE_COMMIT_SHA} org.opencontainers.image.created: ${DRONE_BUILD_FINISHED} org.opencontainers.image.version: ${DRONE_TAG:-${DRONE_COMMIT_SHA:0:7}} when: branch: include: [ main, develop ] event: include: [ push, pull_request, tag ] - name: publish-tag image: plugins/docker settings: registry: rubble.se:5000 repo: rubble.se:5000/hemhub/api dockerfile: Dockerfile username: from_secret: docker_username password: from_secret: docker_password # Tag builds get a clean semver tag tags: - ${DRONE_TAG} buildkit: true labels: org.opencontainers.image.source: ${DRONE_GIT_HTTP_URL} org.opencontainers.image.revision: ${DRONE_COMMIT_SHA} org.opencontainers.image.created: ${DRONE_BUILD_FINISHED} org.opencontainers.image.version: ${DRONE_TAG} when: event: include: [ tag ] trigger: event: - push - pull_request - tag volumes: # Host (or tmp) volume to persist Gradle cache between builds - name: gradle-cache host: path: /tmp/drone/gradle-cache