this post was submitted on 05 Sep 2023
47 points (94.3% liked)

Programming

17313 readers
164 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 1 year ago
MODERATORS
 

In a lot of projects, this is usually done via README. It tells you what running dependencies to install and how to run certain commands.

This can get harder to maintain as things change, the project grows, and complexity increases.

I see two parts to automate here: actually setting up the environment, and running the application or orchestrating multiple apps.

How do you address this?

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 8 points 1 year ago (1 children)

I work primarily on the JVM & the projects (personal/corporate) I work w/ can be summarised as below:

  1. Building & running the repo is done on the host using an SCM (software configuration management tool) such as Gradle or SBT.
  2. The external dependencies of the repo, such as Redis, are managed via adocker-compose.yml.
  3. The README contains a short series of commands to do different tasks RE (1)

However one approach that I've always been fond of (& apply/advocate wherever I can) is to replace (3) w/ a Makefile containing a bunch of standard targets shared across all repos, eg test, integration-test. Then Makefiles are thinly customised to fit the repo's particular repo.

This has proven to be very helpful wrt congnitive load (and also CI/CD pipelines): ALL projects, regardless of the toolchain, use the same set of commands, namely

  • make test
  • make integration-test
  • make compose-up
  • make run

In short (quoting myself here):

Don't repeat yourself. Make Make make things happen for you!

[–] [email protected] 2 points 1 year ago (1 children)

How do you manage JVM versions? We have many older projects that use 8, and some newer ones using 17, for example.

[–] [email protected] 1 points 1 year ago

I've been using sdkman for about a decade now and am totally pleased w/ it. It does a very good job of managing JDK versions for you and much more, eg SBT, Gradle, Scala, Groovy, Leiningen, SpringBoot, ...

Now, technically you could use sdkman in your CI/CD pipeline too but I'd find it a strong smell. I've always used dedicated images pre-configured for a particular JDK version in the pipeline.