ThomasVitale / developer-experience-java-kubernetes

Samples showing how to use different tools and patterns to improve the developer experience and optimise the inner development loop.
Apache License 2.0
62 stars 22 forks source link

How Tilt livereload works? #2

Open demkom58 opened 6 months ago

demkom58 commented 6 months ago

Can you explain a bit on how live-reload works in case of tilt?

# Build
custom_build(
    # Name of the container image
    ref = 'book-service',
    # Command to build the container image
    command = './gradlew bootBuildImage --imageName $EXPECTED_REF',
    # Files to watch that trigger a new build
    deps = ['build.gradle', './bin/main'],
    # Enables live reload
    live_update = [
        sync('./bin/main', '/workspace/BOOT-INF/classes')
    ]
)

# Deploy
k8s_yaml(['config/deployment.yml', 'config/service.yml'])

# Manage
k8s_resource('book-service', port_forwards=['8080:8080', '9090:9090'])

In particular, what exactly is './bin/main'? I'm asking this question because I can't get this work and official examples are completely different.

ThomasVitale commented 4 months ago

@demkom58 thanks for your question. I have updated the documentation to add a bit more information: https://github.com/ThomasVitale/developer-experience-java-kubernetes/tree/main/04-tilt

The live reload functionality is based on three main aspects:

  1. The IDE continuously compiling your Java classes upon change (by default in Visual Studio Code, it must be configured in IntelliJ IDEA).
  2. The container image supporting reloading the Java process running inside the container when a Java class is changed (Paketo Buildpacks ensures that support when using the Base builder).
  3. A tool like Tilt or Skaffold transferring compiled Java classes from the local folder (./bin/main in Visual Studio Code, ./build/classes/java/main and ./build/resources/main in IntelliJ IDEA) into the container (/workspace/BOOT-INF/classes when using Paketo Buildpacks).

You can find additional information on the Paketo Buildpacks official documentation: https://paketo.io/docs/howto/java/#enable-process-reloading