Skip to content

Latest commit

 

History

History
83 lines (63 loc) · 2.46 KB

File metadata and controls

83 lines (63 loc) · 2.46 KB

Choosing Your Image

This guide is for students and faculty setting up a course or assignment that uses plcc-ng.

Which image? One question

Does your course implement language semantics in Haskell?

  • No → use the standard image (smaller, faster to start):

    {
      "name": "My PLCC-NG Project",
      "image": "ghcr.io/ourplcc/devcontainers/plcc-ng:2"
    }
  • Yes → use the full image (adds the Haskell toolchain):

    {
      "name": "My PLCC-NG Project",
      "image": "ghcr.io/ourplcc/devcontainers/plcc-ng-full:2"
    }

Save the snippet as .devcontainer/devcontainer.json in your project.

What's inside

plcc-ng (3.1 GB) plcc-ng-full (12.4 GB)
plcc-ng (all plcc-* commands)
Python 3.12
Java 21
JavaScript (Node LTS)
Haskell (GHC, cabal)

Both images are published for amd64 (Codespaces) and arm64 (Apple Silicon).

Picking a version tag

Tag Meaning
latest Most recent release
2 Latest 2.x.x release
2.1 Latest 2.1.x release
2.1.3 Exact release (immutable)

Recommendation for courses: pin the major tag (e.g. :2) for the semester. You get plcc-ng updates and security patches automatically but are protected from breaking changes mid-course.

The image's major tag tracks plcc-ng's major version: :2 carries plcc-ng 2.x, and :1 stays on plcc-ng 1.x. A course already running on :1 is not affected by the 2.0 release and keeps receiving 1.x patches — switch to :2 between terms, not mid-semester.

Custom setups: the feature

If the prebuilt images don't fit (different Java version, extra tools, other base image), compose your own devcontainer with the plcc-ng feature. It installs plcc-ng and Python; add language features as needed:

{
  "name": "My Custom PLCC-NG Project",
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/ourplcc/features/plcc-ng:1": {},
    "ghcr.io/devcontainers/features/java:1": { "version": "21" }
  }
}

The feature's version option pins a plcc-ng release from PyPI, e.g. { "version": "2.0.2" }; the default is latest.

Note: the first Codespaces start of a feature-composed devcontainer builds the container from scratch (several minutes). The prebuilt images exist to avoid exactly that — prefer them when they fit.