Chapter 01Lesson 05~180 minutes

Checkpoint Lab — GitLab Platform Foundations: GitLab.com, Self-Managed, Dedicated, Tiers, and Architecture

Complete a GitLab platform-foundations checkpoint: map a disposable project across UI, local Git, optional glab, and REST; predict state changes; document trust boundaries; diagnose one failure; and clean up safely.

Checkpoint labVerificationTrust boundariesCleanupChapter 01

Learning objectives

  • Create and verify a disposable GitLab.com Free project using a personal namespace and synthetic content.
  • Predict and then verify at least two namespace/project/ref state changes across independent observation surfaces.
  • Produce an offering/namespace/project/runner trust-boundary diagram that separates GitLab control state from Git and execution/data planes.
  • Diagnose a safe context/API failure using the chapter’s evidence-first sequence.
  • Archive or delete only the disposable project after confirming no valuable data or credentials are present, then bridge to Chapter 02 authentication and credential hygiene.

1. Checkpoint mission

Your goal is not to demonstrate every GitLab menu. Your goal is to prove that you can identify a GitLab resource, predict which layer an operation changes, observe the resulting state from more than one surface, diagnose a mismatch without escalating privileges, and clean up safely.

Required assumptions: GitLab.com Free; one disposable project in your personal namespace; Git installed locally; public synthetic content for the unauthenticated API check. glab is optional and used read-only if already configured. No paid tier, Dedicated tenant, Self-Managed admin access, custom runner, cloud account, Kubernetes cluster, or AI credits are required.

2. Preflight checklist

  • Choose a unique project name such as platform-foundations-checkpoint.
  • Confirm the selected namespace is your personal training namespace, not an employer or valuable group.
  • Use only synthetic text. No passwords, PATs, SSH private keys, customer names, internal URLs, or proprietary source.
  • Record the GitLab host: gitlab.com.
  • Decide whether the project can safely be public. If not, use a private project and substitute the supplied API response fixture for the unauthenticated API step.
  • Do not change protected refs, roles, runners, CI/CD variables, or security policies in this checkpoint.

3. Prediction ledger

Before creating anything, write these predictions in a local note:

Action Predicted changed state Predicted unchanged state
Create project + initialize README GitLab project resource; repository initial commit; default branch. No local clone yet; no custom runner; no paid entitlement change.
Create and commit platform-map.md locally Local Git objects and local branch HEAD. Hosted branch remains unchanged until push.
Push commit Remote repository branch ref becomes reachable at new SHA; GitLab commit view updates. Project visibility and namespace remain unchanged.
Read Projects API No state change. Everything—this is a GET/read-only observation.

4. Create the checkpoint project

Use the current GitLab create-project flow to create platform-foundations-checkpoint in your personal namespace. Initialize with a README. Record the resulting full URL and project ID if shown. Then inspect visibility, default branch, and initial commit SHA before cloning.

Do not infer that the default branch must always be main; GitLab can inherit a configured default branch name. Record what your project actually shows.

5. Clone, change, and verify the Git plane

git clone https://gitlab.com/YOUR_NAMESPACE/platform-foundations-checkpoint.git
cd platform-foundations-checkpoint

git remote -v
git branch --show-current
git rev-parse HEAD

printf '%s\n' \
  '# GitLab Platform Boundary' \
  '' \
  'Git plane: commits, refs, local working tree.' \
  'GitLab plane: project metadata, namespace, collaboration and automation.' \
  > platform-map.md

git add platform-map.md
git commit -m "docs: map Git and GitLab state"

# Prediction checkpoint: record this SHA before pushing.
git rev-parse HEAD
git status --short --branch

git push origin HEAD

Verify the pushed SHA in the GitLab commit/branch view. Your checkpoint notes should explicitly say that git commit changed local repository state and git push transferred objects/updated the remote ref.

6. Compare UI, Git, glab, and REST

# Local Git evidence
git remote -v
git branch --show-current
git rev-parse HEAD

# Public GitLab project evidence
curl --silent --show-error \
  "https://gitlab.com/api/v4/projects/YOUR_NAMESPACE%2Fplatform-foundations-checkpoint"

# Optional read-only glab evidence if already configured
glab auth status --hostname gitlab.com
glab repo view -F json

Build a compact evidence table with: host, path_with_namespace, namespace kind, visibility, default branch, local branch, local HEAD SHA, hosted latest SHA, and clone URL. Mark which tool proved each field.

Do not use glab auth status --show-token. The token value contributes nothing to this checkpoint and creates an avoidable credential leak surface.

7. Draw the trust-boundary diagram

Checkpoint architecture
flowchart TD
USER[GitLab user / browser] --> NS[Personal namespace]
NS --> PROJ[GitLab project]
PROJ --> META[Metadata / visibility / default branch]
PROJ --> REPO[Git repository]
LOCAL[Local Git clone] <-->|clone/fetch/push| REPO
API[REST GET] --> PROJ
GLAB[glab read-only\noptional] --> PROJ
PIPE[Future pipeline control plane] -. not used in Chapter 01 .-> PROJ
RUN[Future runner/executor] -. separate execution trust boundary .-> PIPE
REG[Future registry/artifacts] -. separate data identity .-> PROJ

Explain every arrow: browser/API/glab requests act on GitLab application resources; Git transport exchanges repository objects/refs; pipelines and runners are shown as future layers specifically so you do not mistake them for Git repository state.

Add one note for each offering: on GitLab.com GitLab operates the shared SaaS platform; on Dedicated GitLab operates a managed single-tenant service; on Self-Managed your organization operates the instance infrastructure and lifecycle.

8. Controlled failure drill

Trigger one safe failure by requesting the project with the slash unencoded:

curl -i \
  "https://gitlab.com/api/v4/projects/YOUR_NAMESPACE/platform-foundations-checkpoint"

Apply the diagnostic sequence: preserve status and URL → identify REST/project-identifier scope → compare with browser path → correct the project identifier to YOUR_NAMESPACE%2Fplatform-foundations-checkpoint → verify 200 OK and path_with_namespace.

Do not change visibility or create a token to solve a URL-construction failure.

9. Final verification checklist

  • The full project path names the intended GitLab.com host and personal namespace.
  • The API namespace.kind matches your expected namespace type.
  • The GitLab default branch is recorded rather than assumed.
  • git remote -v points to the same project.
  • The local branch and HEAD are known.
  • The latest pushed SHA is visible in GitLab.
  • The REST response identifies the same path, visibility, and default branch.
  • Optional glab output identifies the same project without exposing a token.
  • You can explain why the API failure was a request-identity problem, not a Git failure.
  • No paid feature, runner, CI variable, cloud credential, or Self-Managed administrator action was required.

10. Cleanup / rollback

First inspect the repository one last time and confirm it contains only the synthetic README and platform-map.md. If you want to retain the project for Chapter 02, leave it clearly named as a lab. If you are finished with it, use the current project settings to archive it where appropriate or delete it only after confirming the complete namespace/project path.

Deletion is irreversible from the perspective of this lab and may have delayed-deletion behavior depending on current GitLab policy. Never practice project deletion on a valuable project. The course does not require force-push, history rewrite, transfer, or visibility changes.

Local cleanup is separate from hosted cleanup. Removing the clone directory does not archive/delete the GitLab project, and archiving/deleting the GitLab project does not automatically remove your local clone.

11. What Chapter 01 adds to a production GitLab operating model

You now have the foundational invariant for the entire course: every operation is attached to a resource, scope, authority, and trust boundary. Later chapters add merge requests, approvals, CI/CD, runners, environments, registries, security scanners/policies, APIs/hooks, Kubernetes, and administration. The same method persists: classify the object, inspect current state, make the minimum authorized change, and verify independently.

Chapter 02 adds the missing identity layer: account security, two-factor authentication, SSH keys, access tokens, service accounts, and credential hygiene. Authentication will be taught separately from authorization so that “I can sign in” never becomes “I must be allowed to do this.”

Checkpoint questions

You run git commit and predict that the GitLab web page will immediately show the new SHA. What is wrong with the prediction?

Your Projects API response says namespace.kind is user. What does that tell you?

A feature is absent in the checkpoint project. What evidence should you gather before concluding you lack permission?

Why is a runner drawn in the architecture even though this chapter did not run CI?

What is the correct response if you discover real credentials in the disposable project?

Chapter 01 summary

GitLab is a platform around Git, not a synonym for Git. You can now distinguish GitLab.com, Dedicated, and Self-Managed; separate offerings from Free/Premium/Ultimate tiers; identify personal/group namespace boundaries; map a project to its repository; observe state through UI, Git, glab, and REST; diagnose context errors without privilege escalation; and clean up disposable resources safely.

Chapter 02

Accounts, 2FA, SSH keys, access tokens, service accounts, and credentials

The next chapter secures the identities and credentials that operate the project model you have just learned.

Official references

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.