This repo hosts a curated selection of challenges from off-on-dev/open-source-challenges, adapted for the Dynatrace community.
The OffOn open source challenges are designed to run in a devcontainer, both locally and via GitHub Codespaces. To give the Dynatrace community dedicated usage tracking, each challenge run needs to report where it came from.
Rather than adding Dynatrace-specific devcontainer configs into the core OffOn repo, which would clutter a partner-agnostic project with community-specific setup, we maintain this separate repo. It contains the subset of challenges relevant to the Dynatrace community, with its own devcontainer configuration.
Challenge content in this repo is sourced from the upstream OffOn repo and should not diverge. Please make content fixes upstream in off-on-dev/open-source-challenges rather than here. This repo only adds the devcontainer configuration on top.
Run the Sync adventure from upstream workflow from the Actions tab and give it an adventure slug
(e.g. dead-reckoning). It copies that adventure plus the shared lib/ from upstream main and
opens a PR, so maintainers pick exactly which challenges get synced rather than pulling in
everything automatically.
Content is copied verbatim apart from the numbered-slug rename below. Every level's
devcontainer.json also gets one added key:
"remoteEnv": { "OFFON_EXTERNAL_SOURCE": "dynatrace-community" }which is what lib/scripts/tracker.sh reads to tag usage as coming from the Dynatrace community.
.upstream-sync.yaml records which upstream commit each synced path came from, and the PR body
links the compare range since the last sync.
Notes for reviewers and maintainers:
- Numbered upstream slugs lose the number.
01-echoes-lost-in-orbitlands asadventures/echoes-lost-in-orbit/, and its levels are relabelled fromAdventure 01 | 🟢 Beginner (…)to🛰️ Echoes Lost in Orbit | 🟢 Beginner (…). Re-running a sync is safe and idempotent. - On those PRs, check the rewritten paths. The rename repoints
adventures/<slug>and.devcontainer/<slug>_*references inside the copied files. They feed ArgoCD andpost-start.sh, so a miss breaks the challenge. Community thread URLs keep the number. - Check the
lib/diff on every sync PR.lib/is shared by all adventures, so syncing one can change behaviour for the others, including live ones. adventures/lex-imperfecta/is live and hand-copied. Syncing05-lex-imperfectanow overwrites it rather than being rejected. That should work — it even fixes a level name the hand-copy missed — but it is untested, so review that PR closely.adventures/echoes-lost-in-orbit/deliberately diverges from upstream. It was authored against the old challenge structure —smoke-test.sh, noMakefile, and a "Verify Adventure" GitHub Actions step that does not exist in this repo, so a solved level never produced a certificate. It has been moved onto the current structure (verify.shending incheck_submission_readiness), anddocs/was dropped. A syncrm -rfs bothadventures/<slug>/and.devcontainer/<slug>_*before copying, so re-syncing01-echoes-lost-in-orbitreverts all of it and puts the dead end back. Fix upstream first, or re-apply this divergence on top of that PR before merging.
Challenge content originates from off-on-dev/open-source-challenges. See that repo for license terms.