Skip to content

Commit

Permalink
Move projects to their own directory (#101)
Browse files Browse the repository at this point in the history
  • Loading branch information
illicitonion authored Jan 8, 2023
1 parent 82eb18d commit b0c24f5
Show file tree
Hide file tree
Showing 80 changed files with 86 additions and 55 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/batch-processing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: batch-processing tests
on: [push]
defaults:
run:
working-directory: batch-processing
working-directory: projects/batch-processing
jobs:
test:
runs-on: ubuntu-latest
Expand All @@ -11,7 +11,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version-file: "batch-processing/go.mod"
go-version-file: "projects/batch-processing/go.mod"
cache: false
- name: Test
run: make test
6 changes: 3 additions & 3 deletions .github/workflows/buggy-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: buggy-app tests
on: [push]
defaults:
run:
working-directory: buggy-app
working-directory: projects/buggy-app
jobs:
test:
runs-on: ubuntu-latest
Expand All @@ -11,8 +11,8 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version-file: "buggy-app/go.mod"
cache-dependency-path: "buggy-app/go.sum"
go-version-file: "projects/buggy-app/go.mod"
cache-dependency-path: "projects/buggy-app/go.sum"
cache: true
- name: Test
run: make migrate test
44 changes: 8 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
+++
title="Projects"
title="Immersive Engineering Programme"
+++

![](./readme-assets/giphy.gif)
Expand All @@ -8,48 +8,20 @@ title="Projects"

An immersive, introductory course to backend software engineering using [go](https://go.dev).

This course is split into two strands: workbooks to read, and projects to build. In the future, there will also be troubleshooting exercises to do, and potentially product-focused work.

You can view all of the projects in [the projects section](./projects), and all of the reading in [the primers section](./primers). We recommend following through both in parallel.

Don't worry about _all_ of the details in the primers - they're more intended as introductions to topics which you may want to reference back in the future as you run into specific issues. Trying to write code and solve the problems solved by topics in the primer will help you understand their contents a lot better.

## Requirements

Before you start this course, make sure you've read and followed all of the instructions in the [prep](prep/README.md) document. This will get you set up and explain how to work through the projects.

Remember: you can _always_ Google or ask for help if you get stuck.

## Projects

This course is structured into self-contained projects that you can work through at your own pace.

Each project has its own directory with a README.md file that has instructions. If you want to take a look at one way of completing an exercise, there's some code waiting on a branch prefixed `impl/` (short for "implementation") and an associated [Pull Request](https://github.com/CodeYourFuture/immersive-go-course/pulls) for you to look at. Try not to copy!

Most exercises finish with a list of optional extension tasks. It's highly recommended that you try them out. Note that often the extensions are open-ended and under-specified - make sure to think about them with a curious mind: Why are they useful? What trade-offs do they have?

1. [CLI & Files](./cli-files)
<br>An introduction to building things with Go by replicating the unix tools `cat` and `ls`.
1. [Servers & HTTP requests](./http-auth)
<br>Learn about long-running processes, HTTP and `curl`
1. [Servers & Databases](./server-database)
<br>Build a server that takes data from a database and serves it in `json` format
1. [Multiple Servers](./multiple-servers)
<br>Build and run file & API servers behind nginx in a simple multi-server architecture
1. [Docker & Cloud Deployment](./docker-cloud/)
<br>Use containers to reproducibly deploy applications into the cloud
1. [gRPC](./grpc-client-server)
<br>Learn about RPCs and how they differ from REST, and start thinking about observability
1. [Batch Processing](./batch-processing/)
<br>Build an image processing pipeline with cloud storage
1. [Buggy App](./buggy-app/)
<br>Run, debug, and fix a buggy application
1. [Memcache](./memcached-clusters)
<br>Explore sharding and replication of state
1. [Kafka Cron](./kafka-cron)
<br>Build a distributed multi-server application handling variable load, with Kafka as a task queue
1. [RAFT and OTel](./raft-otel)
<br>Build a complex distributed system for with strong consistency, and instrument it with tracing

## Contributing

Having your help to improve these projects would be amazing. See [CONTRIBUTING.md](./CONTRIBUTING.md) for a guide on how to get involved.
Having your help to improve this course would be amazing. See [CONTRIBUTING.md](./CONTRIBUTING.md) for a guide on how to get involved.

Feel free to ask for help in the CYF Slack!

[tourofgo]: https://go.dev/tour
[node]: https://nodejs.org/en/
40 changes: 40 additions & 0 deletions projects/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
+++
title="Projects"
+++

## Requirements

Before you start this course, make sure you've read and followed all of the instructions in the [prep](../prep/README.md) document. This will get you set up and explain how to work through the projects.

Remember: you can _always_ Google or ask for help if you get stuck.

## Projects

This course is structured into self-contained projects that you can work through at your own pace.

Each project has its own directory with a README.md file that has instructions. If you want to take a look at one way of completing an exercise, there's some code waiting on a branch prefixed `impl/` (short for "implementation") and an associated [Pull Request](https://github.com/CodeYourFuture/immersive-go-course/pulls) for you to look at. Try not to copy!

Most exercises finish with a list of optional extension tasks. It's highly recommended that you try them out. Note that often the extensions are open-ended and under-specified - make sure to think about them with a curious mind: Why are they useful? What trade-offs do they have?

1. [CLI & Files](./cli-files)
<br>An introduction to building things with Go by replicating the unix tools `cat` and `ls`.
1. [Servers & HTTP requests](./http-auth)
<br>Learn about long-running processes, HTTP and `curl`
1. [Servers & Databases](./server-database)
<br>Build a server that takes data from a database and serves it in `json` format
1. [Multiple Servers](./multiple-servers)
<br>Build and run file & API servers behind nginx in a simple multi-server architecture
1. [Docker & Cloud Deployment](./docker-cloud/)
<br>Use containers to reproducibly deploy applications into the cloud
1. [gRPC](./grpc-client-server)
<br>Learn about RPCs and how they differ from REST, and start thinking about observability
1. [Batch Processing](./batch-processing/)
<br>Build an image processing pipeline with cloud storage
1. [Buggy App](./buggy-app/)
<br>Run, debug, and fix a buggy application
1. [Memcache](./memcached-clusters)
<br>Explore sharding and replication of state
1. [Kafka Cron](./kafka-cron)
<br>Build a distributed multi-server application handling variable load, with Kafka as a task queue
1. [RAFT and OTel](./raft-otel)
<br>Build a complex distributed system for with strong consistency, and instrument it with tracing
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
15 changes: 15 additions & 0 deletions projects/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"order": [
"cli-files",
"http-auth",
"server-database",
"multiple-servers",
"docker-cloud",
"grpc-client-server",
"batch-processing",
"buggy-app",
"memcached-clusters",
"kafka-cron",
"raft-otel"
]
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
32 changes: 18 additions & 14 deletions website/build.sh
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
#!/bin/bash -eu

td="$(mktemp -d)"
curl -L https://github.com/gohugoio/hugo/releases/download/v0.109.0/hugo_extended_0.109.0_Linux-64bit.tar.gz | tar xzf - -C "${td}" hugo
chmod 0755 "${td}/hugo"

mkdir -p website/content/projects

for dir in $(find . -maxdepth 1 -type d -not -name '.*' -not -name website -not -name primers -not -name workbooks); do
cp -r "${dir}" website/content/projects/
done

cp -r primers website/content/
if "$(command -v hugo)" >/dev/null 2>/dev/null; then
hugo=hugo
else
td="$(mktemp -d)"
case "$(uname)" in
Darwin)
curl -L https://github.com/gohugoio/hugo/releases/download/v0.109.0/hugo_extended_0.109.0_darwin-universal.tar.gz | tar xzf - -C "${td}" hugo
;;
Linux)
curl -L https://github.com/gohugoio/hugo/releases/download/v0.109.0/hugo_extended_0.109.0_Linux-64bit.tar.gz | tar xzf - -C "${td}" hugo
;;
esac
chmod 0755 "${td}/hugo"
hugo="${td}/hugo"
fi

cp -r prep primers projects website/content/

mkdir -p website/content/about
cp CONTRIBUTING.md website/content/about/contributing.md

cp README.md website/content/projects/_index.md

for file in $(find website/content/projects -name README.md); do
mv "${file}" "${file%README.md}index.md"
done

cd website
"${td}/hugo"
"${hugo}"

0 comments on commit b0c24f5

Please sign in to comment.