{"id":20490830,"url":"https://github.com/circleci-public/cimg-clojure","last_synced_at":"2025-08-03T20:42:55.297Z","repository":{"id":37592019,"uuid":"218836700","full_name":"CircleCI-Public/cimg-clojure","owner":"CircleCI-Public","description":"The Next-Gen CircleCI Clojure Docker Convenience Image.","archived":false,"fork":false,"pushed_at":"2025-03-07T17:30:12.000Z","size":75,"stargazers_count":3,"open_issues_count":1,"forks_count":4,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-03-27T07:35:49.503Z","etag":null,"topics":["cimg","circleci","circleci-cimg","clojure","convenience-image"],"latest_commit_sha":null,"homepage":"https://circleci.com/developer/images/image/cimg/clojure","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CircleCI-Public.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-31T18:45:39.000Z","updated_at":"2025-03-07T17:30:15.000Z","dependencies_parsed_at":"2023-11-22T18:28:12.833Z","dependency_job_id":"69bc4604-9f43-4013-8561-5f4833a6df05","html_url":"https://github.com/CircleCI-Public/cimg-clojure","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircleCI-Public%2Fcimg-clojure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircleCI-Public%2Fcimg-clojure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircleCI-Public%2Fcimg-clojure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CircleCI-Public%2Fcimg-clojure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CircleCI-Public","download_url":"https://codeload.github.com/CircleCI-Public/cimg-clojure/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248744499,"owners_count":21154875,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cimg","circleci","circleci-cimg","clojure","convenience-image"],"created_at":"2024-11-15T17:18:40.561Z","updated_at":"2025-04-13T16:34:46.268Z","avatar_url":"https://github.com/CircleCI-Public.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\t\u003cp\u003e\n\t\t\u003cimg alt=\"CircleCI Logo\" src=\"https://raw.github.com/CircleCI-Public/cimg-clojure/main/img/circle-circleci.svg?sanitize=true\" width=\"75\" /\u003e\n\t\t\u003cimg alt=\"Docker Logo\" src=\"https://raw.github.com/CircleCI-Public/cimg-clojure/main/img/circle-docker.svg?sanitize=true\" width=\"75\" /\u003e\n\t\t\u003cimg alt=\"Clojure Logo\" src=\"https://raw.github.com/CircleCI-Public/cimg-clojure/main/img/circle-clojure.svg?sanitize=true\" width=\"75\" /\u003e\n\t\u003c/p\u003e\n\t\u003ch1\u003eCircleCI Convenience Images =\u003e Clojure\u003c/h1\u003e\n\t\u003ch3\u003eA Continous Integration focused Clojure Docker image built to run on CircleCI\u003c/h3\u003e\n\u003c/div\u003e\n\n[![CircleCI Build Status](https://circleci.com/gh/CircleCI-Public/cimg-clojure.svg?style=shield)](https://circleci.com/gh/CircleCI-Public/cimg-clojure) [![Software License](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/CircleCI-Public/cimg-clojure/main/LICENSE) [![Docker Pulls](https://img.shields.io/docker/pulls/cimg/clojure)](https://hub.docker.com/r/cimg/clojure) [![CircleCI Community](https://img.shields.io/badge/community-CircleCI%20Discuss-343434.svg)](https://discuss.circleci.com/c/ecosystem/circleci-images)\n\n***This image is designed to supercede the original CircleCI Clojure image, `circleci/clojure`.***\n\n`cimg/clojure` is a Docker image created by CircleCI with continuous integration builds in mind.\nEach tag contains a Clojure version, a JVM, and any binaries and tools that are required for builds to complete successfully in a CircleCI environment.\n\n## Support Policy\n\nThe CircleCI Docker Convenience Image support policy can be found on the [CircleCI docs](https://circleci.com/docs/convenience-images-support-policy) site. This policy outlines the release, update, and deprecation policy for CircleCI Docker Convenience Images.\n\n## Table of Contents\n\n- [Getting Started](#getting-started)\n- [How This Image Works](#how-this-image-works)\n- [Development](#development)\n- [Contributing](#contributing)\n- [Additional Resources](#additional-resources)\n- [License](#license)\n\n\n## Getting Started\n\nThis image can be used with the CircleCI `docker` executor.\nFor example:\n\n```yaml\njobs:\n  build:\n    docker:\n      - image: cimg/clojure:1.10.3\n    steps:\n      - checkout\n      - run: lein version\n```\n\nIn the above example, the CircleCI Clojure Docker image is used for the primary container.\nMore specifically, the tag `1.10.3` is used meaning the version of Clojure will be Clojure v1.10.3.\nYou can now use Clojure within the steps for this job.\n\n\n## How This Image Works\n\nThis image contains the Clojure programming language as installed via clj as well as [Leiningen](https://leiningen.org/).\nThese Clojure images contain OpenJDK v17 though alternates with support for OpenJDK v8 (and possibly) more are in the works..\n\nBabashka is pre-installed.\nPlease note that Babashka has frequent releases while CircleCI only releases Clojure images as the upstream project makes a release.\nThere will be times were the pre-installed version of Babashka is older than you might want.\n\n### Parent Tags and Parent Slugs\n\nParent Tags introduce the ability to choose a specific version to include in the tag. In conjunction with\nthe Parent Slug, Clojure now supports choosing which OpenJDK version to use and looks like: `parentSlug-parentTag`, which would translate to `openjdk-8.0` \n\n### Variants\n\nVariant images typically contain the same base software, but with a few additional modifications.\n\n#### Node.js\n\nThe Node.js variant is the same Clojure image but with Node.js also installed.\nThe Node.js variant can be used by appending `-node` to the end of an existing `cimg/clojure` tag.\n\n```yaml\njobs:\n  build:\n    docker:\n      - image: cimg/clojure:1.10.3-node\n    steps:\n      - checkout\n      - run: node --version\n```\n\n#### Browsers\n\nThe browsers variant is the same Clojure image but with Node.js, Selenium, and browser dependencies pre-installed via apt.\nThe browsers variant can be used by appending `-browser` to the end of an existing `cimg/clojure` tag.\nThe browsers variant is designed to work in conjunction with the [CircleCI Browser Tools orb](https://circleci.com/developer/orbs/orb/circleci/browser-tools).\nYou can use the orb to install a version of Google Chrome and/or Firefox into your build. The image contains all of the supporting tools needed to use both the browser and its driver.\n\n```yaml\norbs:\n  browser-tools: circleci/browser-tools@1.1\njobs:\n  build:\n    docker:\n      - image: cimg/clojure:1.10.3-browsers\n    steps:\n      - browser-tools/install-browser-tools\n      - checkout\n      - run: |\n          node --version\n          google-chrome --version\n```\n\n### Tagging Scheme\n\nThis image has the following tagging scheme:\n\n```\ncimg/clojure:\u003cclojure-version\u003e[-openjdk-version][-variant]\n```\n\n`\u003cclojure-version\u003e` - The version of Clojure to use.\nThis can be a full SemVer point release (such as `1.10.1`) or just the minor release (such as `1.10`).\nIf you use the minor release tag, it will automatically point to future patch updates as they are released by the Clojure Team.\nFor example, the tag `1.10` points to Clojure v1.10.1 now, but when the next release comes out, it will point to Clojure v1.10.2.\n\n`\u003copenjdk-version\u003e` - This specifies the openjdk version to use. Note: the default image tag: `cimg/clojure:\u003cclojure-version\u003e[-variant]` will utilize the latest version e.g 17.0\n\n`[-variant]` - Variant tags, if available, can optionally be used.\nOnce the Node.js variant is available, it could be used like this: `cimg/clojure:1.10-node`.\n\n\n## Development\n\nImages can be built and run locally with this repository.\nThis has the following requirements:\n\n- local machine of Linux (Ubuntu tested) or macOS\n- modern version of Bash (v4+)\n- modern version of Docker Engine (v19.03+)\n\n### Cloning For Community Users (no write access to this repository)\n\nFork this repository on GitHub.\nWhen you get your clone URL, you'll want to add `--recurse-submodules` to the clone command in order to populate the Git submodule contained in this repo.\nIt would look something like this:\n\n```bash\ngit clone --recurse-submodules \u003cmy-clone-url\u003e\n```\n\nIf you missed this step and already cloned, you can just run `git submodule update --recursive` to populate the submodule.\nThen you can optionally add this repo as an upstream to your own:\n\n```bash\ngit remote add upstream https://github.com/CircleCI-Public/cimg-clojure.git\n```\n\n### Cloning For Maintainers ( you have write access to this repository)\n\nClone the project with the following command so that you populate the submodule:\n\n```bash\ngit clone --recurse-submodules git@github.com:CircleCI-Public/cimg-clojure.git\n```\n\n### Generating Dockerfiles\n\nDockerfiles can be generated for a specific Clojure version using the `gen-dockerfiles.sh` script.\nFor example, to generate the Dockerfile for Clojure v1.10.1, you would run the following from the root of the repo:\n\n```bash\n./shared/gen-dockerfiles.sh 1.10.3#1.10.3.1058\n```\n\nThis is the Clojure version `1.10.3` followed by a version parameter, which is the Clojure number together with the build number, `1.10.3.1058`.\nYou can get the current build number from the [Linux Install Instructions][linux-version] for Clojure.\nIt's the last part of the version in the example on that page.\n\nThe generated Dockerfile will be located at `./1.10/\u003cparent-tag\u003e/Dockefile` in addition to their corresponding variants located at `./1.10/\u003cparent-tag\u003e/\u003cvariant\u003e/Dockefile`\n\nTo build this image locally and try it out, you can run the following (assuming openjdk 8.0):\n\n```bash\ncd 1.10\ndocker build -t test/clojure:1.10.1-openjdk-8.0 .\ndocker run -it test/clojure:1.10.1-openjdk-8.0 bash\n```\n\nIf using the default version (latest), you could run either of the following:\n```bash\ncd 1.10\ndocker build -t test/clojure:1.10.1 .\ndocker run -it test/clojure:1.10.1 bash\n\ndocker build -t test/clojure:1.10.1-openjdk-17.0 .\ndocker run -it test/clojure:1.10.1-openjdk-17.0 bash\n```\n\n### Building the Dockerfiles\n\nTo build the Docker images locally as this repository does, you'll want to run the `build-images.sh` script:\n\n```bash\n./build-images.sh\n```\n\nThis would need to be run after generating the Dockerfiles first.\nWhen releasing proper images for CircleCI, this script is run from a CircleCI pipeline and not locally.\n\n### Publishing Official Images (for Maintainers only)\n\nThe individual scripts (above) can be used to create the correct files for an image, and then added to a new git branch, committed, etc.\nA release script is included to make this process easier.\nTo make a proper release for this image, lets's use the fake Clojure version of Clojure v9.9.9, you would run the following from the repo root:\n\n```bash\n./shared/release.sh 9.9.9#9.9.9.1234\n```\n\nHere the fake Clojure version `9.9.9` is used followed by a version parameter, which is the fake Clojure number together with the fake build number, `9.9.9.1234`.\nYou can get the current build number from the [Linux Install Instructions][linux-version] for Clojure.\nIt's the last part of the version in the example on that page.\n\nThis will automatically create a new Git branch, generate the Dockerfile(s), stage the changes, commit them, and push them to GitHub.\nAll that would need to be done after that is:\n\n- wait for build to pass on CircleCI\n- review the PR\n- merge the PR\n\nThe main branch build will then publish a release.\n\n### Incorporating Changes\n\nHow changes are incorporated into this image depends on where they come from.\n\n**build scripts** - Changes within the `./shared` submodule happen in its [own repository](https://github.com/CircleCI-Public/cimg-shared).\nFor those changes to affect this image, the submodule needs to be updated.\nTypically like this:\n\n```bash\ncd shared\ngit pull\ncd ..\ngit add shared\ngit commit -m \"Updating submodule for foo.\"\n```\n\n**parent image** - By design, when changes happen to a parent image, they don't appear in existing Clojure images.\nThis is to aid in \"determinism\" and prevent breaking customer builds.\nNew Clojure images will automatically pick up the changes.\n\nIf you *really* want to publish changes from a parent image into the Clojure image, you have to build a specific image version as if it was a new image.\nThis will create a new Dockerfile and once published, a new image.\n\n**Clojure specific changes** - Editing the `Dockerfile.template` file in this repo is how to modify the Clojure image specifically.\nDon't forget that to see any of these changes locally, the `gen-dockerfiles.sh` script will need to be run again (see above).\n\n## Contributing\n\nWe encourage [issues](https://github.com/CircleCI-Public/cimg-clojure/issues) and [pull requests](https://github.com/CircleCI-Public/cimg-clojure/pulls) against this repository.\n\nPlease check out our [contributing guide](.github/CONTRIBUTING.md) which outlines best practices for contributions and what you can expect from the images team at CircleCI.\n\n\n## Additional Resources\n\n[CircleCI Docs](https://circleci.com/docs/) - The official CircleCI Documentation website.  \n[CircleCI Configuration Reference](https://circleci.com/docs/2.0/configuration-reference/#section=configuration) - From CircleCI Docs, the configuration reference page is one of the most useful pages we have.\nIt will list all of the keys and values supported in `.circleci/config.yml`.  \n[Docker Docs](https://docs.docker.com/) - For simple projects this won't be needed but if you want to dive deeper into learning Docker, this is a great resource.  \n\n\n## License\n\nThis repository is licensed under the MIT license.\nThe license can be found [here](./LICENSE).\n\n\n\n[linux-version]: https://clojure.org/guides/install_clojure#_linux_instructions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcircleci-public%2Fcimg-clojure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcircleci-public%2Fcimg-clojure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcircleci-public%2Fcimg-clojure/lists"}