Skip to content

Commit b384231

Browse files
authored
Merge pull request #10 from posit-dev/readme-updates
Add repository READMEs, license, and contributor scaffolding
2 parents f964637 + 44f0a80 commit b384231

7 files changed

Lines changed: 501 additions & 3 deletions

File tree

CODE_OF_CONDUCT.md

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
2+
# Contributor Covenant Code of Conduct
3+
4+
## Our Pledge
5+
6+
We as members, contributors, and leaders pledge to make participation in our
7+
community a harassment-free experience for everyone, regardless of age, body
8+
size, visible or invisible disability, ethnicity, sex characteristics, gender
9+
identity and expression, level of experience, education, socio-economic status,
10+
nationality, personal appearance, race, caste, color, religion, or sexual
11+
identity and orientation.
12+
13+
We pledge to act and interact in ways that contribute to an open, welcoming,
14+
diverse, inclusive, and healthy community.
15+
16+
## Our Standards
17+
18+
Examples of behavior that contributes to a positive environment for our
19+
community include:
20+
21+
* Demonstrating empathy and kindness toward other people
22+
* Being respectful of differing opinions, viewpoints, and experiences
23+
* Giving and gracefully accepting constructive feedback
24+
* Accepting responsibility and apologizing to those affected by our mistakes,
25+
and learning from the experience
26+
* Focusing on what is best not just for us as individuals, but for the overall
27+
community
28+
29+
Examples of unacceptable behavior include:
30+
31+
* The use of sexualized language or imagery, and sexual attention or advances of
32+
any kind
33+
* Trolling, insulting or derogatory comments, and personal or political attacks
34+
* Public or private harassment
35+
* Publishing others' private information, such as a physical or email address,
36+
without their explicit permission
37+
* Other conduct which could reasonably be considered inappropriate in a
38+
professional setting
39+
40+
## Enforcement Responsibilities
41+
42+
Community leaders are responsible for clarifying and enforcing our standards of
43+
acceptable behavior and will take appropriate and fair corrective action in
44+
response to any behavior that they deem inappropriate, threatening, offensive,
45+
or harmful.
46+
47+
Community leaders have the right and responsibility to remove, edit, or reject
48+
comments, commits, code, wiki edits, issues, and other contributions that are
49+
not aligned to this Code of Conduct, and will communicate reasons for moderation
50+
decisions when appropriate.
51+
52+
## Scope
53+
54+
This Code of Conduct applies within all community spaces, and also applies when
55+
an individual is officially representing the community in public spaces.
56+
Examples of representing our community include using an official email address,
57+
posting via an official social media account, or acting as an appointed
58+
representative at an online or offline event.
59+
60+
## Enforcement
61+
62+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
63+
reported to the community leaders responsible for enforcement at
64+
[INSERT CONTACT METHOD].
65+
All complaints will be reviewed and investigated promptly and fairly.
66+
67+
All community leaders are obligated to respect the privacy and security of the
68+
reporter of any incident.
69+
70+
## Enforcement Guidelines
71+
72+
Community leaders will follow these Community Impact Guidelines in determining
73+
the consequences for any action they deem in violation of this Code of Conduct:
74+
75+
### 1. Correction
76+
77+
**Community Impact**: Use of inappropriate language or other behavior deemed
78+
unprofessional or unwelcome in the community.
79+
80+
**Consequence**: A private, written warning from community leaders, providing
81+
clarity around the nature of the violation and an explanation of why the
82+
behavior was inappropriate. A public apology may be requested.
83+
84+
### 2. Warning
85+
86+
**Community Impact**: A violation through a single incident or series of
87+
actions.
88+
89+
**Consequence**: A warning with consequences for continued behavior. No
90+
interaction with the people involved, including unsolicited interaction with
91+
those enforcing the Code of Conduct, for a specified period of time. This
92+
includes avoiding interactions in community spaces as well as external channels
93+
like social media. Violating these terms may lead to a temporary or permanent
94+
ban.
95+
96+
### 3. Temporary Ban
97+
98+
**Community Impact**: A serious violation of community standards, including
99+
sustained inappropriate behavior.
100+
101+
**Consequence**: A temporary ban from any sort of interaction or public
102+
communication with the community for a specified period of time. No public or
103+
private interaction with the people involved, including unsolicited interaction
104+
with those enforcing the Code of Conduct, is allowed during this period.
105+
Violating these terms may lead to a permanent ban.
106+
107+
### 4. Permanent Ban
108+
109+
**Community Impact**: Demonstrating a pattern of violation of community
110+
standards, including sustained inappropriate behavior, harassment of an
111+
individual, or aggression toward or disparagement of classes of individuals.
112+
113+
**Consequence**: A permanent ban from any sort of public interaction within the
114+
community.
115+
116+
## Attribution
117+
118+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
119+
version 2.1, available at
120+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
121+
122+
Community Impact Guidelines were inspired by
123+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
124+
125+
For answers to common questions about this code of conduct, see the FAQ at
126+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
127+
[https://www.contributor-covenant.org/translations][translations].
128+
129+
[homepage]: https://www.contributor-covenant.org
130+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
131+
[Mozilla CoC]: https://github.com/mozilla/diversity
132+
[FAQ]: https://www.contributor-covenant.org/faq
133+
[translations]: https://www.contributor-covenant.org/translations

LICENSE.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Posit Software, PBC
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,114 @@
1-
# images-specialized
2-
Posit Specialized Service Container Images (Google Cloud Workstations, Azure Machine Learning, etc.)
1+
# Posit Workbench Container Images for Specialized Environments
2+
3+
Container images that package [Workbench](https://docs.posit.co/ide/server-pro) for specific managed cloud platforms. Each image arrives configured for the host platform's authentication, storage, and lifecycle conventions, so you can use it directly as the workstation or compute image.
4+
5+
For the standard, non-platform-specific Workbench container images, see [posit-dev/images-workbench](https://github.com/posit-dev/images-workbench).
6+
7+
## Images
8+
9+
| Image | Platform | Platform documentation |
10+
|:------|:---------|:-----------------------|
11+
| [workbench-for-google-cloud-workstations](./workbench-for-google-cloud-workstations/) | Google Cloud Workstations | [Develop code using Posit Workbench](https://docs.cloud.google.com/workstations/docs/develop-code-using-posit-workbench-rstudio) |
12+
| [workbench-for-microsoft-azure-ml](./workbench-for-microsoft-azure-ml/) | Azure Machine Learning compute instances | [Add custom applications such as RStudio or Posit Workbench](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-compute-instance?view=azureml-api-2&tabs=python#add-custom-applications-such-as-rstudio-or-posit-workbench) |
13+
14+
See each image's documentation for the canonical registry, available tags, and platform-specific configuration.
15+
16+
## Prerequisites
17+
18+
| Tool | Required for | Install |
19+
|------|--------------|---------|
20+
| Container build tool | Building images locally | [Docker](https://docs.docker.com/get-docker/), [Podman](https://podman.io/docs/installation), or [Buildah](https://github.com/containers/buildah/blob/main/install.md) |
21+
| Product license | Running Workbench | [Licensing FAQ](https://docs.posit.co/licensing/licensing-faq.html) |
22+
23+
To consume the published images on their target platforms, follow the platform documentation linked above. You do not need any local container tooling.
24+
25+
## Building from source
26+
27+
You can interact with this repository in multiple ways:
28+
29+
* [Build container images directly](#build) from the Containerfile.
30+
* [Use the `bakery` CLI](#using-bakery) to manage and build container images.
31+
32+
## Build
33+
34+
You can build Open Container Initiative (OCI) container images from the definitions in this repository using one of the following container build tools:
35+
36+
* [buildah](https://github.com/containers/buildah/blob/main/install.md)
37+
* [docker buildx](https://github.com/docker/buildx#installing)
38+
* [podman](https://podman.io/docs/installation)
39+
40+
Each Containerfile uses the root of the repository as its build context. The [`bakery.yaml`](https://github.com/posit-dev/images-shared/blob/main/posit-bakery/CONFIGURATION.md#bakery-configuration) project file is in the root of this repository.
41+
42+
```shell
43+
PWB_VERSION="2026.01"
44+
45+
# Build the Google Cloud Workstations standard image using docker
46+
docker buildx build \
47+
--tag workbench-for-google-cloud-workstations:${PWB_VERSION} \
48+
--file workbench-for-google-cloud-workstations/${PWB_VERSION}/Containerfile.ubuntu2404.std \
49+
.
50+
51+
# Build the Azure ML standard image using buildah
52+
buildah build \
53+
--tag workbench-for-microsoft-azure-ml:${PWB_VERSION} \
54+
--file workbench-for-microsoft-azure-ml/${PWB_VERSION}/Containerfile.ubuntu2404.std \
55+
.
56+
57+
# Build the Azure ML minimal image using podman
58+
podman build \
59+
--tag workbench-for-microsoft-azure-ml:${PWB_VERSION} \
60+
--file workbench-for-microsoft-azure-ml/${PWB_VERSION}/Containerfile.ubuntu2404.min \
61+
.
62+
```
63+
64+
## Using `bakery`
65+
66+
This repository follows the structure described in [bakery usage](https://github.com/posit-dev/images-shared/tree/main/posit-bakery#usage).
67+
68+
Additional documentation:
69+
- [Configuration Reference](https://github.com/posit-dev/images-shared/blob/main/posit-bakery/CONFIGURATION.md): `bakery.yaml` schema and options
70+
- [Templating Reference](https://github.com/posit-dev/images-shared/blob/main/posit-bakery/TEMPLATING.md): Jinja2 macros for Containerfile templates
71+
- [CI Workflows](https://github.com/posit-dev/images-shared/blob/main/CI.md): shared GitHub Actions workflows for building and pushing images
72+
73+
### Prerequisites
74+
75+
Build prerequisites:
76+
77+
* [python](https://docs.astral.sh/uv/guides/install-python/)
78+
* [uv](https://docs.astral.sh/uv/getting-started/installation/)
79+
* [docker buildx bake](https://github.com/docker/buildx#installing)
80+
* [gh](https://github.com/cli/cli#installation) (required while repositories are private)
81+
* `bakery`
82+
* `goss` and `dgoss` for running image validation tests
83+
84+
### Build with `bakery`
85+
86+
By default, bakery creates an ephemeral JSON [bakefile](https://docs.bakefile.org/en/latest/language.html) to render all containers in parallel.
87+
88+
```shell
89+
bakery build
90+
```
91+
92+
You can view the bake plan using `bakery build --plan`. Use the CLI flags to build only a subset of images in the project.
93+
94+
### Test images
95+
96+
After building the container images, run the test suite for all images:
97+
98+
```shell
99+
bakery run dgoss
100+
```
101+
102+
You can use CLI flags to limit the tests to a subset of images.
103+
104+
## Related repositories
105+
106+
This repository is part of the [Posit Container Images](https://github.com/posit-dev/images) ecosystem. The non-specialized Workbench images live in [images-workbench](https://github.com/posit-dev/images-workbench). For shared build tooling and CI workflows, see [images-shared](https://github.com/posit-dev/images-shared).
107+
108+
## Share your feedback
109+
110+
We invite you to join us on [GitHub Discussions](https://github.com/posit-dev/images/discussions) to ask questions and share feedback.
111+
112+
## Issues
113+
114+
If you encounter any issues or have any questions, please [open an issue](https://github.com/posit-dev/images-specialized/issues). We appreciate your feedback.

bakery.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
# Define properties of the local repository. This information will be used when labeling image builds.
88
repository:
9-
url: "github.com/posit-dev/images-workbench"
9+
url: "github.com/posit-dev/images-specialized"
1010
vendor: "Posit Software, PBC"
1111
maintainer: "Posit Docker Team <docker@posit.co>"
1212
authors:

justfile

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env just --justfile
2+
3+
setup:
4+
pre-commit --version || (echo "pre-commit not found, install with: uv tool install pre-commit" && exit 1)
5+
pre-commit install --install-hooks
6+
7+
install-bakery *OPTS:
8+
#!/bin/bash
9+
# TODO: Update this after package is published somewhere
10+
uv tool install {{OPTS}} 'git+ssh://git@github.com/posit-dev/images-shared.git@main#egg=posit-bakery&subdirectory=posit-bakery'
11+
12+
install-goss:
13+
#!/bin/bash
14+
mkdir -p tools
15+
curl -fsSL https://github.com/goss-org/goss/releases/latest/download/goss-linux-amd64 -o {{justfile_directory()}}/tools/goss
16+
chmod +rx {{justfile_directory()}}/tools/goss
17+
curl -fsSL https://github.com/goss-org/goss/releases/latest/download/dgoss -o {{justfile_directory()}}/tools/dgoss
18+
chmod +rx {{justfile_directory()}}/tools/dgoss
19+
20+
init: install-bakery install-goss
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Posit Workbench for Google Cloud Workstations
2+
3+
This container image packages [Workbench](https://docs.posit.co/ide/server-pro/) as a [Google Cloud Workstations](https://cloud.google.com/workstations) configuration image. It builds on the predefined Google workstation base image and adds Workbench, R, Python, Jupyter, and the workstation startup hooks needed to launch Workbench when a user starts their workstation.
4+
5+
## Setup
6+
7+
Use the Google Cloud documentation to attach this image to a workstation configuration:
8+
9+
[Develop code using Posit Workbench (RStudio) on Google Cloud Workstations](https://docs.cloud.google.com/workstations/docs/develop-code-using-posit-workbench-rstudio)
10+
11+
That guide covers creating a workstation cluster and configuration, selecting the Workbench image, and connecting users.
12+
13+
## Image registries
14+
15+
Posit publishes the image to Google Artifact Registry. Pull from the location closest to your workstation cluster:
16+
17+
| Region | Repository |
18+
|----------|-----------------------------------------------------------------------------|
19+
| Multi-region (US) | `us-docker.pkg.dev/posit-images/cloud-workstations/workbench` |
20+
| US Central | `us-central1-docker.pkg.dev/posit-images/cloud-workstations/workbench` |
21+
| Europe | `europe-docker.pkg.dev/posit-images/cloud-workstations/workbench` |
22+
| Asia | `asia-docker.pkg.dev/posit-images/cloud-workstations/workbench` |
23+
24+
You can browse the US Central repository from the web at [`https://us-central1-docker.pkg.dev/posit-images/cloud-workstations/workbench`](https://us-central1-docker.pkg.dev/posit-images/cloud-workstations/workbench) to view available tags.
25+
26+
A mirror is also available at [`ghcr.io/posit-dev/workbench-for-google-cloud-workstations`](https://github.com/posit-dev/images-specialized/pkgs/container/workbench-for-google-cloud-workstations).
27+
28+
## Image variants
29+
30+
| Variant | Description |
31+
|---------|-------------|
32+
| `std` (Standard) | Opinionated image with R, Python, Jupyter, and Workbench preinstalled. Runs out of the box. |
33+
| `min` (Minimal) | Smaller image you can extend with your own R, Python, and system dependencies. Will not run as-is. |
34+
35+
## Image tags
36+
37+
Tags follow `{version}-{os}[-{variant}]`. For example:
38+
39+
- `2026.01.2-418.pro1-ubuntu-24.04`: Standard variant on Ubuntu 24.04
40+
- `2026.01.2-418.pro1-ubuntu-24.04-std`: Standard variant (explicit)
41+
- `2026.01.2-418.pro1-ubuntu-24.04-min`: Minimal variant
42+
- `latest`: Most recent Standard build on the default OS
43+
44+
Browse the [Artifact Registry repository](https://us-docker.pkg.dev/posit-images/cloud-workstations/workbench) for the full tag list.
45+
46+
## Installed software
47+
48+
| Component | Path |
49+
|------------|--------------------------------------------------------------------------|
50+
| Workbench | `/usr/lib/rstudio-server/` |
51+
| R | `/opt/R/{version}/bin/R` |
52+
| Python | `/opt/python/{version}/bin/python3` (symlinked at `/opt/python/default`) |
53+
| JupyterLab | `/opt/python/jupyter/bin/jupyter` |
54+
| Quarto | `/usr/local/bin/quarto` |
55+
| TinyTeX | `/opt/.TinyTeX` |
56+
57+
The workstation runtime manages user authentication, home-directory persistence, and the Workbench license. For details, see the Google documentation linked above.
58+
59+
## Exposed ports
60+
61+
| Port | Description |
62+
|------|-------------------|
63+
| 8787 | HTTP web interface |
64+
| 5559 | Job Launcher |
65+
66+
## Licensing
67+
68+
This image requires a Workbench for Google Cloud Workstations license. A standard Workbench license does not work with this image.
69+
70+
For licensing inquiries, see the [Posit Google Cloud solutions page](https://posit.co/solutions/google-cloud).
71+
72+
## Caveats
73+
74+
### Security
75+
76+
Review this image before production use. If your organization has specific Common Vulnerabilities and Exposures (CVE) or vulnerability requirements, rebuild the image to meet your security standards.
77+
78+
Posit rebuilds the published image weekly to include operating system patches.
79+
80+
### Base image
81+
82+
This image builds on `us-central1-docker.pkg.dev/cloud-workstations-images/predefined/base:public-image-current` and inherits its lifecycle. The base image and the workstation runtime provide some behaviors (workstation startup, user provisioning, persistent home directories), not Workbench.
83+
84+
## Documentation
85+
86+
- [Posit Workbench documentation](https://docs.posit.co/ide/server-pro/)
87+
- [Google Cloud Workstations documentation](https://cloud.google.com/workstations/docs)
88+
- [Develop code using Posit Workbench on Google Cloud Workstations](https://docs.cloud.google.com/workstations/docs/develop-code-using-posit-workbench-rstudio)

0 commit comments

Comments
 (0)