Skip to content

Commit e117523

Browse files
committed
Initial commit
0 parents  commit e117523

File tree

250 files changed

+9645
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

250 files changed

+9645
-0
lines changed

.editorconfig

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
root = true
2+
3+
[*.{dsl, dslf}]
4+
charset = utf-8
5+
indent_style = space
6+
indent_size = 4
7+
trim_trailing_whitespace = true

.github/CODEOWNERS

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @rvr06

.github/workflows/gh-pages.yaml

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# https://gohugo.io/hosting-and-deployment/hosting-on-github/
2+
3+
name: Build and deploy GitHub pages
4+
5+
on:
6+
push:
7+
paths:
8+
- 'docs/**'
9+
- '.github/workflows/gh-pages.yml'
10+
branches:
11+
- main # Set a branch to deploy
12+
pull_request:
13+
14+
# Enable manual workflow triggering from the Actions tab
15+
workflow_dispatch:
16+
17+
concurrency:
18+
group: ${{ github.workflow }}-${{ github.ref }}
19+
20+
env:
21+
# Set the documentation root
22+
documentation_root: './docs'
23+
24+
jobs:
25+
build:
26+
permissions:
27+
contents: read
28+
runs-on: ubuntu-22.04
29+
defaults:
30+
run:
31+
working-directory: ${{ env.documentation_root }}
32+
steps:
33+
- uses: actions/checkout@v3
34+
with:
35+
fetch-depth: 0
36+
submodules: recursive
37+
lfs: 'true'
38+
39+
- name: Setup Node
40+
uses: actions/setup-node@v3
41+
with:
42+
node-version: 16
43+
cache: 'npm'
44+
cache-dependency-path: '${{ env.documentation_root }}/package-lock.json'
45+
46+
- name: Install dependencies
47+
run: npm ci
48+
49+
- name: Setup Hugo
50+
uses: peaceiris/actions-hugo@v2.6.0
51+
with:
52+
hugo-version: 0.123.8
53+
extended: true
54+
55+
- name: Build
56+
run: hugo --minify
57+
58+
- name: Upload artifact
59+
uses: actions/upload-pages-artifact@v1
60+
with:
61+
path: ${{ env.documentation_root }}/public
62+
63+
deploy:
64+
defaults:
65+
run:
66+
working-directory: ${{ env.documentation_root }}
67+
68+
if: github.ref == 'refs/heads/main'
69+
70+
# Add a dependency to the build job
71+
needs: build
72+
73+
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
74+
permissions:
75+
pages: write # to deploy to Pages
76+
id-token: write # to verify the deployment originates from an appropriate source
77+
78+
environment:
79+
name: github-pages
80+
url: ${{ steps.deployment.outputs.page_url }}
81+
82+
runs-on: ubuntu-latest
83+
steps:
84+
- name: Deploy to GitHub Pages
85+
id: deployment
86+
uses: actions/deploy-pages@v1

.gitignore

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# IDE
2+
.vscode/
3+
.vs/
4+
5+
# Structurizr
6+
**/.structurizr/
7+
**/workspace.json
8+
9+
# HUGO
10+
**/.hugo_build.lock
11+
**/resources
12+
**/public
13+
14+
# NPM
15+
**/node_modules

CONTRIBUTING.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Contributing
2+
3+
Contributions from the community are welcome.
4+
To better understand the code repository, see the [README](https://github.com/rvr06/c4-bootcamp/blob/main/README.md).
5+
When contributing to this repository, please first discuss the change you wish to make by opening a [new issue](https://github.com/rvr06/c4-bootcamp/issues/new) or contributing to an [existing one](https://github.com/rvr06/c4-bootcamp/issues).
6+
7+
## Pull Request Process
8+
9+
* Branch must be prefixed e.g. `features/xxx`, `fixes/yyy` or `spikes/zzz`.
10+
* Create a Pull Request and ensure to attach an existing issue for tracking.

LICENSE

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Structurizr Limited
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

+199
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
# BOOTCAMP
2+
3+
We introduced the concept of [architecture as code or code-first approach](https://rvr06.github.io/c4-bootcamp/docs/code). We took the opportunity to leverage [Structurizr tool suite](https://rvr06.github.io/c4-bootcamp/docs/code/#structurizr) to support the end-user journey. However, most of the journey focused on what one could expect to gain from a single model defined as code, without dwelling on how authoring this model for too long. It is now time to address this point.
4+
5+
## What will you learn from this course
6+
7+
Leveraging an hypothetical [requirement](./stage%2000/specs.md), this bootcamp will guide you over tiny stages to gradually define and refine a compelling `software model`. Alongside his journey, one will be exposed to multiple dimensions a `software model` should cover. Unfolding each stage will fuel the reader with insights regarding both the matching `structurizr` syntax and the underlying `C4` philosophy.
8+
9+
> The course is self-directed learning. You can do it at whatever pace you wish.
10+
11+
## How to get started
12+
13+
Here’s how the `C4 bootcamp` works.
14+
15+
### Use GitHub to Make Life Easy
16+
17+
This GitHub repository contains `workspaces` and other assets you will need to complete the bootcamp.
18+
19+
Thus, if you want to follow the bootcamp we recommend doing the following:
20+
21+
- Sign up for [GitHub](https://github.com), if you haven’t already.
22+
- [Clone this repository](https://github.com/rvr06/c4-bootcamp.git) to your local machine.
23+
- As you go through the project, keep a web browser tab open to the [c4 bootcamp](https://github.com/rvr06/c4-bootcamp/blob/main/README.md) so you can read all of the instructions clearly and easily.
24+
25+
### Bootcamp structure
26+
27+
`C4 bootcamp` consists of `17 stages`:
28+
29+
## [Stage 01](./stage%2001/README.md)
30+
31+
![](https://img.shields.io/badge/c4-workspace-c49060)
32+
![](https://img.shields.io/badge/c4-model-c49060)
33+
![](https://img.shields.io/badge/c4-views-c49060)
34+
![](https://img.shields.io/badge/model-softwareSystem-0c7cba)
35+
![](https://img.shields.io/badge/model-name-b2ccd6)
36+
![](https://img.shields.io/badge/model-description-546e7a)
37+
38+
## [Stage 02](./stage%2002/README.md)
39+
40+
![](https://img.shields.io/badge/views-theme-c49060)
41+
![](https://img.shields.io/badge/views-systemLandscape-c49060)
42+
![](https://img.shields.io/badge/views-systemContext-0c7cba)
43+
44+
## [Stage 03](./stage%2003/README.md)
45+
46+
![](https://img.shields.io/badge/model-person-834187)
47+
![](https://img.shields.io/badge/model-relationships-c49060)
48+
49+
## [Stage 04](./stage%2004/README.md)
50+
51+
![](https://img.shields.io/badge/c4-comment-cacaca)
52+
![](https://img.shields.io/badge/model-tags-e4551d)
53+
![](https://img.shields.io/badge/model-url-cacaca)
54+
![](https://img.shields.io/badge/views-theme-c49060)
55+
56+
## [Stage 05](./stage%2005/README.md)
57+
58+
![](https://img.shields.io/badge/model-container-c92d39)
59+
![](https://img.shields.io/badge/model-technology-4f9db8)
60+
![](https://img.shields.io/badge/views-container-c92d39)
61+
62+
## [Stage 06](./stage%2006/README.md)
63+
64+
![](https://img.shields.io/badge/model-component-7ab648)
65+
![](https://img.shields.io/badge/views-component-7ab648)
66+
67+
## [Stage 07](./stage%2007/README.md)
68+
69+
![](https://img.shields.io/badge/views-dynamic-c49060)
70+
![](https://img.shields.io/badge/views-animation-c49060)
71+
72+
## [Stage 08](./stage%2008/README.md)
73+
74+
![](https://img.shields.io/badge/model-deploymentEnvironment-ee5f8a)
75+
![](https://img.shields.io/badge/model-deploymentNode-3aa6dd)
76+
![](https://img.shields.io/badge/model-softwareSystemInstance-0c7cba)
77+
![](https://img.shields.io/badge/model-containerInstance-c92d39)
78+
![](https://img.shields.io/badge/views-deployment-ee5f8a)
79+
80+
## [Stage 09](./stage%2009/README.md)
81+
82+
![](https://img.shields.io/badge/model-deploymentGroup-fcc438)
83+
![](https://img.shields.io/badge/model-infrastructureNode-19967d)
84+
![](https://img.shields.io/badge/model-healthCheck-cacaca)
85+
86+
## [Stage 10](./stage%2010/README.md)
87+
88+
![](https://img.shields.io/badge/views-branding-c49060)
89+
![](https://img.shields.io/badge/views-theme-c49060)
90+
91+
## [Stage 11](./stage%2011/README.md)
92+
93+
![](https://img.shields.io/badge/views-filtered-c49060)
94+
95+
## [Stage 12](./stage%2012/README.md)
96+
97+
![](https://img.shields.io/badge/c4-!constant-c49060)
98+
![](https://img.shields.io/badge/model-perspectives-c49060)
99+
100+
## [Stage 13](./stage%2013/README.md)
101+
102+
![](https://img.shields.io/badge/c4-!identifiers-c49060)
103+
![](https://img.shields.io/badge/c4-!impliedRelationships-c49060)
104+
105+
## [Stage 14](./stage%2014/README.md)
106+
107+
![](https://img.shields.io/badge/c4-!docs-c49060)
108+
![](https://img.shields.io/badge/markdown-embed-000000)
109+
110+
## [Stage 15](./stage%2015/README.md)
111+
112+
![](https://img.shields.io/badge/model-group-c49060)
113+
114+
## [Stage 16](./stage%2016/README.md)
115+
116+
![](https://img.shields.io/badge/model-!include-c49060)
117+
![](https://img.shields.io/badge/model-ref-c49060)
118+
![](https://img.shields.io/badge/views-!include-c49060)
119+
120+
## [Stage 17](./stage%2017/README.md)
121+
122+
![](https://img.shields.io/badge/c4-extends-c49060)
123+
![](https://img.shields.io/badge/model-ref-c49060)
124+
125+
And a bunch of `bonus stages`:
126+
127+
## [Bonus Stage 01](./bonus%20stage%2001/README.md)
128+
129+
![](https://img.shields.io/badge/c4-hack-000000)
130+
131+
## [Bonus Stage 02](./bonus%20stage%2002/README.md)
132+
133+
![](https://img.shields.io/badge/model-description-546e7a)
134+
![](https://img.shields.io/badge/model-url-cacaca)
135+
![](https://img.shields.io/badge/views-theme-c49060)
136+
137+
## [Bonus Stage 03](./bonus%20stage%2003/README.md)
138+
139+
![](https://img.shields.io/badge/model-deploymentEnvironment-ee5f8a)
140+
![](https://img.shields.io/badge/model-deploymentNode-3aa6dd)
141+
![](https://img.shields.io/badge/model-infrastructureNode-19967d)
142+
![](https://img.shields.io/badge/model-softwareSystemInstance-0c7cba)
143+
![](https://img.shields.io/badge/model-containerInstance-c92d39)
144+
![](https://img.shields.io/badge/views-deployment-ee5f8a)
145+
![](https://img.shields.io/badge/views-theme-c49060)
146+
147+
## [Bonus Stage 04](./bonus%20stage%2004/README.md)
148+
149+
![](https://img.shields.io/badge/c4-hack-000000)
150+
![](https://img.shields.io/badge/model-softwareSystem-0c7cba)
151+
![](https://img.shields.io/badge/model-tags-e4551d)
152+
![](https://img.shields.io/badge/model-url-cacaca)
153+
![](https://img.shields.io/badge/views-systemLandscape-c49060)
154+
![](https://img.shields.io/badge/views-filtered-c49060)
155+
![](https://img.shields.io/badge/views-theme-c49060)
156+
157+
### Stage Layout
158+
159+
Each stage contains the following structure:
160+
161+
```cs
162+
╠══ Stage xx
163+
║ ╠══ README.md // step-by-step recipe
164+
║ ╠══ theme*.dslf // extra theme(s) definition (optional)
165+
║ ╚══ workspace.dsl // completed lesson workspace
166+
```
167+
168+
Each `C4 bootcamp` stage contains a `README` which explains the following:
169+
1. The `Structurizr` concepts (eg ![](https://img.shields.io/badge/model-container-c92d39)) and tools you will be applying in the lesson, along with links to any relevant documentation or examples.
170+
1. Step-by-step instructions (✏️) on how to modify the `workspace` to match the expected one at the end of each lesson. Feel free to jump from ✏️ to ✏️, if you want to quickly unfold the stage.
171+
1. If you get stuck following the step-by-step instructions, each lesson contains check points (📙) and a completed `workspace.dsl` (📘) file that shows the expected output. You can compare this against your own code and see what you need to do differently.
172+
173+
Each stage enrichs the previous one, allowing one to tailor `software model` from scratch up to completion. If you are interested on an intermediate stage and don't want to unfold the whole journey prior to it, just take the previous state (`*.dsl` files) as your starting point. Eg, if you would like to exercise `stage 07`, just copy & paste `*.dsl` from `stage 06`, and engage.
174+
175+
### When you're doing the lessons...
176+
177+
A few things to bear in mind when you are following the step-by-step instructions:
178+
179+
1. **Don't just copy and paste** the code shown in the lesson's `README`. You'll retain and learn all of the built-in `Structurizr` functions if you type out the code as it's shown.
180+
1. You might be required to fill in some blanks during individual lessons. Part of helping you learn `Structurizr` involves leaving some parts of the exercise up to you - if you ever feel lost, always check the contents of the `workspace.dsl` for that lesson.
181+
1. Don't be afraid to ask questions.
182+
183+
### Docs
184+
185+
We will provide explanations of all key concepts throughout each lesson, but of course, you should bookmark (and feel free to use!) the [C4 documentation](https://supreme-happiness-8f0f8e3c.pages.github.io/)
186+
187+
### Tools / prerequisites
188+
189+
This course expects the following:
190+
- A Github account and basic knowledge of Git
191+
- An up to date installation of VS Code editor
192+
- An up to date `Cornifer` extension
193+
- An up & running docker daemon
194+
195+
See [here](./stage%2000/prereq.md) for details.
196+
197+
## Time to engage
198+
199+
[Here we go](./stage%2001/README.md)

0 commit comments

Comments
 (0)