Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
165 commits
Select commit Hold shift + click to select a range
f5eda32
update naming to match course layout
sidpalas May 22, 2025
12311f1
add readmes
sidpalas May 22, 2025
db5c358
break out workflow runners section
sidpalas May 22, 2025
2346d16
rename some modules
sidpalas May 22, 2025
57819ff
rename to match modules
sidpalas May 25, 2025
7401d9d
demo aws OIDC token usage
sidpalas May 25, 2025
b47abd4
fix step name
sidpalas May 25, 2025
8e585b0
add aws-region
sidpalas May 25, 2025
5e4ee41
add gh permissions demo
sidpalas May 26, 2025
4028319
checkout code in read-write job
sidpalas May 26, 2025
12c3cd4
use bug label
sidpalas May 26, 2025
63d190f
use documentation label
sidpalas May 26, 2025
cb3efe8
add commentary about available github permissions
sidpalas May 26, 2025
a93f7de
fix step name
sidpalas May 27, 2025
6ab85fe
download and cat artifact
sidpalas May 30, 2025
fed7718
fix job name
sidpalas May 30, 2025
880dd68
add concurrency
sidpalas May 30, 2025
0ed53d1
add static key example
sidpalas May 30, 2025
82b8ff4
refactor
sidpalas May 30, 2025
45d9b0c
Rename workflow
sidpalas May 30, 2025
d2e4390
add other runner types
sidpalas May 30, 2025
7e93761
refactor modules
sidpalas May 30, 2025
8007d16
add caching examples
sidpalas May 30, 2025
40a4601
add minimal node project
sidpalas May 30, 2025
dc683b5
improved naming, simplify caching example
sidpalas Jun 1, 2025
a97e78c
add composite action
sidpalas Jun 3, 2025
bc51eae
rename workflow
sidpalas Jun 3, 2025
ed4db0e
improve job names
sidpalas Jun 3, 2025
f4f4897
add reuseable workflow example
sidpalas Jun 3, 2025
d7d281e
fix name of workflow
sidpalas Jun 3, 2025
531188d
remove checkout step?
sidpalas Jun 3, 2025
0483b23
use source workflow
sidpalas Jun 3, 2025
b83b686
update syntax to remove steps list
sidpalas Jun 3, 2025
f32f981
show sha reference
sidpalas Jun 3, 2025
a5c0c88
inherit secrets
sidpalas Jun 3, 2025
f2d2e4a
add environment
sidpalas Jun 3, 2025
4f92bf3
update commit
sidpalas Jun 3, 2025
4f57132
add javascript action
sidpalas Jun 4, 2025
dcadd59
add workflow calling js action
sidpalas Jun 4, 2025
fec741c
improve input string
sidpalas Jun 4, 2025
47dd8b2
commit .package.lock to node_modules
sidpalas Jun 4, 2025
057d64a
add typescript action
sidpalas Jun 4, 2025
8f56527
add action submodules
sidpalas Jun 4, 2025
86ae5b6
refactor actions to use separate repos from upstream templates
sidpalas Jun 4, 2025
26c0b62
combine workflow for js actions
sidpalas Jun 4, 2025
98e6e87
remove /dist from path
sidpalas Jun 4, 2025
e819890
improve step name
sidpalas Jun 4, 2025
51efa20
remove unneeded comments
sidpalas Jun 4, 2025
c92f480
add container actions workflow
sidpalas Jun 4, 2025
7c1cee8
switch submodule
sidpalas Jun 4, 2025
aa581d4
remove submodules
sidpalas Jun 4, 2025
9e9e442
add shell action
sidpalas Jun 4, 2025
1aff147
show Dockerfile + image references
sidpalas Jun 4, 2025
e86eb6f
add separate prebuilt container action
sidpalas Jun 5, 2025
40b8a72
fix output usage string
sidpalas Jun 5, 2025
5d82063
fix container prebuilt
sidpalas Jun 5, 2025
4081e08
remove prebuilt submodule
sidpalas Jun 5, 2025
08bd5ee
add container prebuilt
sidpalas Jun 5, 2025
eb3053c
add python action
sidpalas Jun 5, 2025
683a287
fix job name
sidpalas Jun 5, 2025
cd6ab5b
add inline python
sidpalas Jun 5, 2025
74ea652
Add common workflows readme
sidpalas Jun 9, 2025
fc438b2
update readme with Namespace as sponsor!
sidpalas Jul 2, 2025
4a015c5
make topics bold
sidpalas Jul 2, 2025
f0f7b76
Update README.md
sidpalas Jul 2, 2025
e644a16
add step scoped env var
sidpalas Jul 7, 2025
b57df7a
make core features workflows more granular
sidpalas Jul 10, 2025
c4cad3a
improve job names
sidpalas Jul 10, 2025
aaec6c8
add namespace runner
sidpalas Jul 10, 2025
89d3747
add job name
sidpalas Jul 10, 2025
fc28ee5
remove empty job
sidpalas Jul 10, 2025
5a60d26
add description of runner types
sidpalas Jul 10, 2025
cdf2506
add current date
sidpalas Jul 10, 2025
5d3bb11
clean up description
sidpalas Jul 10, 2025
e4f99a9
fix wording
sidpalas Jul 10, 2025
1697d16
fix spacing
sidpalas Jul 10, 2025
97b9815
improve job name
sidpalas Jul 11, 2025
3243111
split workflows
sidpalas Jul 11, 2025
aa63c23
fix job name
sidpalas Jul 11, 2025
6231816
restore detailed text
sidpalas Jul 11, 2025
2f42074
strip duplicative auth examples
sidpalas Jul 11, 2025
af09dbf
imrpove permission comment
sidpalas Jul 11, 2025
e592fb4
add success check
sidpalas Jul 11, 2025
4d3520b
improve comments in reuseable workflow job
sidpalas Jul 23, 2025
a78a7ea
add capstone submodule
sidpalas Jul 23, 2025
6ed1603
pin actions to sha, use secrets.GITHUB_TOKEN
sidpalas Jul 23, 2025
2cbef9e
update capstone submodule
sidpalas Jul 25, 2025
da3cc81
update capstone reference
sidpalas Jul 28, 2025
354f143
update capstone reference
sidpalas Jul 28, 2025
56205d5
docs: add readmes for workflow modules
sidpalas Jul 28, 2025
3cf4cfa
add more readmes
sidpalas Jul 28, 2025
84a3763
move readme
sidpalas Jul 28, 2025
02bfd2e
add devbox, update capstone, add local-action task
sidpalas Jul 29, 2025
5f69982
Update README.md
sidpalas Jul 31, 2025
4b00ec1
add cache benchmark workflow
sidpalas Jul 31, 2025
3a84e53
update parameters
sidpalas Jul 31, 2025
1d9ff01
use ns runner for ns prime jobs
sidpalas Jul 31, 2025
52fb5e1
move cache action ahead of file generation
sidpalas Jul 31, 2025
2c16d78
simplify
sidpalas Aug 1, 2025
0ade852
check for files after generating
sidpalas Aug 1, 2025
af06440
check for files elsewhere
sidpalas Aug 1, 2025
b18a335
combine generation jobs
sidpalas Aug 1, 2025
6064f40
clean up
sidpalas Aug 1, 2025
d7aa45d
another attempt
sidpalas Aug 1, 2025
c555f52
switch order of cache path setup in nscloud-prime job
sidpalas Aug 1, 2025
63da554
reduce sizes
sidpalas Aug 1, 2025
c7290a6
reorder jobs
sidpalas Aug 1, 2025
51f7d8b
wait between nscloud prime and consume jobs
sidpalas Aug 1, 2025
8456f26
sleep moar
sidpalas Aug 1, 2025
d408de9
update module 1 readme
sidpalas Aug 4, 2025
39b9243
update common workflows readme
sidpalas Aug 4, 2025
11a7a41
update developer experience readme
sidpalas Aug 4, 2025
3e9a79e
add numbers
sidpalas Aug 4, 2025
d96118f
update best practices readme
sidpalas Aug 4, 2025
6365fea
update caching logic to establish baseline across runs
sidpalas Aug 5, 2025
e6c1301
scale up test
sidpalas Aug 5, 2025
b5f767c
add missing =
sidpalas Aug 5, 2025
55269a2
add GITHUB_STEP_SUMMARY
sidpalas Aug 5, 2025
2794958
add summary job
sidpalas Aug 5, 2025
a8c6821
combine summary steps
sidpalas Aug 5, 2025
092ac0d
check after generation
sidpalas Aug 5, 2025
949c66c
single quote for comparison string
sidpalas Aug 5, 2025
9a799e0
log stuff
sidpalas Aug 5, 2025
be091e1
fix var names
sidpalas Aug 5, 2025
811467e
missed one
sidpalas Aug 5, 2025
e62ea80
update workflow name
sidpalas Aug 5, 2025
70daf4e
feat: add namespace cache benchmark
sidpalas Aug 5, 2025
fcc8b6a
add setup instructions
sidpalas Aug 5, 2025
4975f94
Update README.md
sidpalas Aug 5, 2025
d14713a
feat: demo workflow commands (#4)
sidpalas Aug 5, 2025
c6d1df0
chore: update capstone reference
sidpalas Aug 5, 2025
9df652b
run benchmark every 5 minutes
sidpalas Aug 6, 2025
efefe0b
split ns runner profiles for benchmark
sidpalas Aug 7, 2025
e567bed
use ubuntu-24.04
sidpalas Aug 7, 2025
a7f33e2
use runner labels
sidpalas Aug 7, 2025
89b6a48
switch to amd runners
sidpalas Aug 7, 2025
3e5401e
feat: add dynamic matrix example (#5)
sidpalas Aug 8, 2025
96eff22
Update 04-advanced-features--07-dynamic-matrix.yaml
sidpalas Aug 8, 2025
6045d5b
chore: bump capstone git reference
sidpalas Aug 8, 2025
d9b4e23
chore: bump typescript action commit
sidpalas Aug 8, 2025
cd1b9fb
fix path to typescript action
sidpalas Aug 8, 2025
2ccab76
Remove step 2 env var
sidpalas Aug 16, 2025
634ef07
add gnused, update breakpoint readme
sidpalas Aug 16, 2025
c5a9ab7
add timeout-minutes to job + step
sidpalas Aug 17, 2025
db7de32
pin all actions to sha with actions-up
sidpalas Aug 30, 2025
ef8812c
rename third party auth workflow
sidpalas Sep 1, 2025
1c6bbf1
update repo name
sidpalas Sep 3, 2025
226c827
bump typescript submodule
sidpalas Sep 3, 2025
19a4f7d
Update 06-authoring-actions--04-javascript-actions.yaml
sidpalas Sep 3, 2025
6574fdb
improve devx workflows
sidpalas Sep 5, 2025
f6ff377
fix debug env var workflow name
sidpalas Sep 5, 2025
208a173
actually fail the breakpoint job
sidpalas Sep 5, 2025
f83e45f
checkout code in breakpoint demo
sidpalas Sep 5, 2025
9ce4359
fix capitalization
sidpalas Sep 5, 2025
f351c38
add colons
sidpalas Sep 5, 2025
8509a46
bump capstone submodule
sidpalas Sep 19, 2025
be8bea7
bump capstone
sidpalas Sep 19, 2025
b3e30ec
Update README.md
sidpalas Sep 19, 2025
f451ecf
update readme
sidpalas Sep 21, 2025
6324bbb
add utm parameter to namespace link
sidpalas Sep 22, 2025
3a35d89
Remove redundant gh cli install steps
sidpalas Sep 22, 2025
566813f
fix thumbnail link
sidpalas Sep 23, 2025
246fa14
Fix broken link for 'Installing Devbox' (#26)
ashahba Oct 21, 2025
aaffcd9
Update .gitmodules (#133)
BouTayehGaby Feb 8, 2026
320a727
test github actions push trigger
nikolavrtikola Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .github/workflows/03-core-features--01-hello-world.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Hello World

on:
workflow_dispatch:

jobs:
say-hello-inline-bash:
runs-on: ubuntu-24.04
steps:
- run: echo "Hello from an inline bash script in a GitHub Action Workflow!"
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
name: Hello World
name: Step Types

on:
# push:
# branches:
# - main
workflow_dispatch:

jobs:
say-hello-inline:
say-hello-inline-bash:
runs-on: ubuntu-24.04
steps:
- run: echo "Hello from an inline bash script in a GitHub Action Workflow!"

say-hello-inline-python:
runs-on: ubuntu-24.04
steps:
- run: print("Hello from an inline python script in a GitHub Action Workflow!")
shell: python

say-hello-action:
runs-on: ubuntu-24.04
steps:
- uses: actions/hello-world-javascript-action@e76147da8e5c81eaf017dede5645551d4b94427b # v1.2.3
- uses: actions/hello-world-javascript-action@081a6d193d1dcb38460df1e6927486d748730f9d # v1.1
# - uses: actions/hello-world-javascript-action@v1 # This would work, but it would be less stable and less secure:
with:
who-to-greet: "from an action in the GitHub Action marketplace! 👋"
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ on:
- reopened
paths:
# include markdown files
- "02-mechanics-core/filters/*.md"
- "03-core-features/filters/*.md"
# Exclude txt files
- "!02-mechanics-core/filters/*.txt"
- "!03-core-features/filters/*.txt"

### https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule
# schedule:
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/03-core-features--05-environment-variables.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Environment Variables
on:
workflow_dispatch:
env:
WORKFLOW_VAR: I_AM_WORKFLOW_SCOPED

jobs:
job-1:
runs-on: ubuntu-24.04
env:
JOB_VAR: I_AM_JOB_1_SCOPED
steps:
- name: Inspect scopes job 1 step 1
env:
STEP_VAR: I_AM_STEP_SCOPED
run: |
echo "WORKFLOW_VAR: $WORKFLOW_VAR" # visible
echo "JOB_VAR: $JOB_VAR" # visible
echo "STEP_VAR: $STEP_VAR" # visible only here

- name: Inspect scopes job 1 step 2
run: |
echo "WORKFLOW_VAR: $WORKFLOW_VAR" # visible
echo "JOB_VAR: $JOB_VAR" # visible
echo "STEP_VAR: ${STEP_VAR:-<UNSET>}" # not set here

job-2:
runs-on: ubuntu-24.04
steps:
- name: Inspect scopes job 2 step 2
run: |
echo "WORKFLOW_VAR: $WORKFLOW_VAR" # still visible
echo "JOB_VAR: ${FOO:-<UNSET>}" # not set here
echo "STEP_VAR: ${STEP_VAR:-<UNSET>}" # not set here
35 changes: 35 additions & 0 deletions .github/workflows/03-core-features--06-passing-data.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Passing Variables Between jobs
on:
workflow_dispatch:

jobs:
producer:
runs-on: ubuntu-24.04

outputs:
foo: ${{ steps.generate-foo.outputs.foo }}
steps:
- name: Generate and export foo
id: generate-foo
run: |
foo=bar

# 1) Step output (for job output)
echo "foo=${foo}" >> "$GITHUB_OUTPUT"

# 2) Job-scoped environment variable
echo "FOO=${foo}" >> "$GITHUB_ENV"

- name: Inspect values inside producer
run: |
echo "FOO (set via GITHUB_ENV): $FOO"
echo "foo (step output): ${{ steps.generate-foo.outputs.foo }}"

consumer:
runs-on: ubuntu-24.04
needs: producer
steps:
- name: Inspect values inside consumer (note FOO is unset)
run: |
echo "Value from producer: ${{ needs.producer.outputs.foo }}"
echo "FOO in consumer: ${FOO:-<UNSET>}"
Original file line number Diff line number Diff line change
@@ -1,54 +1,9 @@
name: Environment Vars and Data Passing
name: Secrets and Environments
on:
workflow_dispatch:

env:
GLOBAL: THIS_IS_GLOBAL_SCOPED

jobs:
job-1:
runs-on: ubuntu-24.04
env:
JOB_1: THIS_IS_JOB_1_SCOPED

# Make foo available to other jobs
outputs:
foo: ${{ steps.generate-foo.outputs.foo }}

steps:
- name: Generate and export foo
id: generate-foo
run: |
foo=bar

# 1) Step output (for job output)
echo "foo=${foo}" >> "$GITHUB_OUTPUT"

# 2) Job-scoped environment variable
echo "FOO=${foo}" >> "$GITHUB_ENV"

- name: Inspect values inside job-1
run: |
echo "GLOBAL (workflow-level): $GLOBAL"
echo "JOB_1 (job-level): $JOB_1"
echo "FOO (set via GITHUB_ENV): $FOO"
echo "foo (step output): ${{ steps.generate-foo.outputs.foo }}"

job-2:
runs-on: ubuntu-24.04
needs: job-1
env:
JOB_2: THIS_IS_JOB_2_SCOPED

steps:
- name: Inspect values inside job-2 (note FOO is unset)
run: |
echo "GLOBAL (workflow-level): $GLOBAL"
echo "JOB_2 (job-level): $JOB_2"
echo "Value from job-1: ${{ needs.job-1.outputs.foo }}"
echo "FOO in job-2: ${FOO:-<UNSET>}"

job-staging:
staging-environment:
runs-on: ubuntu-24.04
environment: staging
env:
Expand All @@ -58,7 +13,6 @@ jobs:
# Inject environment-level items into the shell
EXAMPLE_ENVIRONMENT_SECRET: ${{ secrets.EXAMPLE_ENVIRONMENT_SECRET }}
EXAMPLE_ENVIRONMENT_VARIABLE: ${{ vars.EXAMPLE_ENVIRONMENT_VARIABLE }}

steps:
- name: Inspect values inside job
run: |
Expand All @@ -67,7 +21,7 @@ jobs:
echo "Env secret (masked): $EXAMPLE_ENVIRONMENT_SECRET"
echo "Env variable: $EXAMPLE_ENVIRONMENT_VARIABLE"

job-production:
production-environment:
runs-on: ubuntu-24.04
environment: production
env:
Expand All @@ -77,25 +31,10 @@ jobs:
# Inject environment-level items into the shell
EXAMPLE_ENVIRONMENT_SECRET: ${{ secrets.EXAMPLE_ENVIRONMENT_SECRET }}
EXAMPLE_ENVIRONMENT_VARIABLE: ${{ vars.EXAMPLE_ENVIRONMENT_VARIABLE }}

steps:
- name: Inspect values inside job
run: |
echo "Repo secret (masked): $EXAMPLE_REPOSITORY_SECRET"
echo "Repo variable: $EXAMPLE_REPOSITORY_VARIABLE"
echo "Env secret (masked): $EXAMPLE_ENVIRONMENT_SECRET"
echo "Env variable: $EXAMPLE_ENVIRONMENT_VARIABLE"

job-artifact:
runs-on: ubuntu-24.04
steps:
- name: Create artifact file
run: |
echo "This will be stored as an artifact!" > artifact.txt
echo "Generated by job-artifact on $(date)" >> artifact.txt

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: example-artifact
path: artifact.txt
101 changes: 101 additions & 0 deletions .github/workflows/04-advanced-features--01-runner-types.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Runner types
on:
workflow_dispatch:

jobs:
######################################
# GITHUB (MICROSOFT) HOSTED RUNNERS
######################################
# GitHub provides hosted runners which run on Microsoft Azure.
#
# Open source projects get some free usage and pro/team/enterprise GitHub
# subscriptions also come with some number of minutes included (after which
# you pay based on usage.
#
# These are the easiest to get started with (require no additional configuration
# and it makes sense to use the free minutes, but only on workflows which are not in the
# critical path for your production deployments. For usage beyond your quota I suggest
# looking at the below options for higher performance (and more affordable)
# approaches!
######################################
github-hosted-ubuntu-vm:
name: Ubuntu 24.04 VM
runs-on: ubuntu-24.04
steps:
- name: Show runner info
run: |
echo "Hello from ${{ runner.os }}-${{ runner.arch }}"
echo "Runner name (type): ${{ runner.name }}"

github-hosted-windows-vm:
name: Windows 2022 VM
runs-on: windows-2022
steps:
- name: Show runner info
shell: pwsh
run: |
echo "Hello from ${{ runner.os }}-${{ runner.arch }}"
echo "Runner name (type): ${{ runner.name }}"

github-hosted-macos-vm:
name: macOS 14 VM
runs-on: macos-14
steps:
- name: Show runner info
run: |
echo "Hello from ${{ runner.os }}-${{ runner.arch }}"
echo "Runner name (type): ${{ runner.name }}"

alpine-container-on-github-hosted-ubuntu-vm:
name: Alpine container on Ubuntu VM
runs-on: ubuntu-24.04
container:
image: alpine:3.20
steps:
- name: Show runner info
run: |
echo "Hello from ${{ runner.os }}-${{ runner.arch }}"
echo "Runner name (type): ${{ runner.name }}"
echo "Container image: $(grep PRETTY_NAME /etc/os-release)"

######################################
# 3RD PARTY HOSTED RUNNERS
######################################
# There are companies which host GitHub Action runners that provide increased performance for less $$$
#
# One such company happens to be the sponsor of the course! 🙏
#
# ✨ Namespace Labs (https://namespace.so/) ✨
#
# You can likely cut your build times (and your CI bill) signiticantly by using their runners
# and it only takes changing a single line of yaml:
#
# - runs-on: ubuntu-24.04
# + runs-on: namespace-profile-default # The default as of July 2025 is Ubuntu 22.04
#
# (They also offer MacOS and Windows runners!)
######################################
namespace-ubuntu-vm:
name: Namespace Ubuntu VM
runs-on: namespace-profile-default
steps:
- name: Show runner info
run: |
echo "Hello from ${{ runner.os }}-${{ runner.arch }}"
echo "Runner name (type): ${{ runner.name }}"

######################################
# SELF HOSTED RUNNERS
######################################
# There are also methods to self-host github action runners.
#
# These can provide inexpensive compute, but with increased operational overhead.
# They also allow you to execute within your own VPC which may or may not be important to you depending on your business
#
# A few of the most popular options for doing this:
# - https://runs-on.com/ (run jobs as EC2 instances in AWS)
# - https://github.com/actions/actions-runner-controller (run jobs in any Kubernetes cluster)
# - https://docs.railway.com/tutorials/github-actions-runners (run jobs on Railway)
#
# Configuration/usage of these is outside the scope of this course, and is left as an exercise for the reader
######################################
32 changes: 32 additions & 0 deletions .github/workflows/04-advanced-features--02-artifacts.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Artifacts
on:
workflow_dispatch:

jobs:
artifact-producer:
name: Produce artifact
runs-on: ubuntu-24.04
steps:
- name: Create artifact file
run: |
echo "This will be stored as an artifact!" > artifact.txt
echo "Generated by artifact-producer job on $(date)" >> artifact.txt

- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: example-artifact
path: artifact.txt

artifact-consumer:
name: Consume artifact
runs-on: ubuntu-24.04
needs: artifact-producer
steps:
- name: Download artifact
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: example-artifact

- name: Cat artifact file
run: cat artifact.txt
Loading