• Stars
    star
    155
  • Rank 240,817 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created about 5 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Leeway is a heavily caching build system for Go, Typescript and Docker projects.

Leeway

Leeway is a heavily caching build system for Go, Yarn and Docker projects. Its features are:

  • source dependent versions: leeway computes the version of a package based on the sources, dependencies and configuration that make up this package. There's no need (or means) to manually version packages.
  • two-level package cache: leeway caches its build results locally and remotely. The remote cache (a Google Cloud Storage bucket) means builds can share their results and thus become drastically faster.
  • parallel builds: because leeway understands the dependencies of your packages it can build them as parallel as possible.
  • built-in support for Yarn and Go: leeway knows how to link, build and test Yarn and Go packages and applications. This makes building software written in those languages straight forward.
  • build arguments: leeway supports build arguments which can parametrize packages at build time. We support version dependent arguments (where the version depends on the argument value), component-wide constants and workspace-level defaults.
  • rich CLI: leeways CLI supports deep inspection of the workspace and its structure. Its output is easy to understand and looks good.

Leeway structures a repository in three levels:

  • The workspace is the root of all operations. All component names are relative to this path. No relevant file must be placed outside the workspace. The workspace root is marked with a WORKSPACE.yaml file.
  • A components is single piece of standalone software. Every folder in the workspace which contains a BUILD.yaml file is a component. Components are identifed by their path relative to the workspace root.
  • Packages are the buildable unit in leeway. Every component can define multiple packages in its build file. Packages are identified by their name prefixed with the component name, e.g. some-component:pkg.

Installation

Leeway assumes its running on Linux or macOS. It is very very unlikely that this runs on Windows out-of-the-box. To install, just download and unpack a release.

Build setup

Workspace

Place a file named WORKSPACE.yaml in the root of your workspace. For convenience sake you should set the LEEWAY_WORKSPACE_ROOT env var to the path of that workspace. For example:

touch WORKSPACE.yaml
export LEEWAY_WORKSPACE_ROOT=$PWD

The WORKSPACE.yaml may contain some default settings for the workspace:

# defaultTarget is package we build when just running `leeway build`
defaultTarget: some/package:name
#defaultArgs are key=value pairs setting default values for build arguments
defaultArgs:
  key: value

Users can override, and provide additional default arguments using a WORKSPACE.args.yaml file in the workspace root. This is useful for providing local overrides which you might not want to commit to Git. The WORKSPACE.args.yaml takes key value pairs which become available as build arguments. The values herein take precedence over the default arguments in the WORKSPACE.yaml.

foo: bar
key: value

Component

Place a BUILD.yaml in a folder somewhere in the workspace to make that folder a component. A BUILD.yaml primarily contains the packages of that components, but can also contain constant values (think of them as metadata). For example:

# const defines component-wide constants which can be used much like build arguments. Only string keys and values are supported.
const:
  internalName: example
  someRandomProperty: value
packages:
- ...
scripts:
- ...

Script

Scripts are a great way to automate tasks during development time (think yarn scripts). Unlike packages they do not run in isolation by default, but have access to the original workspace. What makes scripts special is that they can dependent on packages which become available to a script in the PATH and as environment variables.

Under the scripts key in the component's BUILD.yaml add:

# name is the component-wide unique name of script. Packages and scripts do NOT share a namespace.
# You can have a package called foo and a script called foo within the same component.
name: some-script-name
# description provides a short synopsis of the script. Shown when running `leeway collect scripts`.
description: A sentence describing what the script is good for.
# Deps list dependencies to packages (NOT scripts) which must be built prior to running this script.
# All built dependencies get added to the PATH environment variable. This is handy if your workspace
# contains tools you want to use in a script.
deps:
- some/other:package
# Env sets environment variables which are present during script execution.
env:
- MESSAGE=hello
# Workdir changes the workdir location/layout of working dir of the script. The following choices are available:
# - origin (default): execute the script in the directory of the containing component in the original workspace.
#                     This is the default mode and handy if one wants to automate tasks in the development workspace.
# - packages:         produces a filesystem layout much like during a generic package build where all deps are
#                     found by their name in a temporary directory. This provides some isolation from the original
#                     workspace, while giving full access to the built dependencies.
workdir: origin
# The actual script. For now, only bash scripts are supported. The shebang is added automatically.
script: |
  echo $MESSAGE, this is where the script goes
  if [ "A$(ps -o comm= -p $$)" = "Abash" ]; then
    echo "it's the bash alright"
  fi
  echo "build args work to: ${myBuildArg}"

Package

A package is an entry in a BUILD.yaml in the packages section. All packages share the following fields:

# name is the component-wide unique name of this package
name: must-not-contain-spaces
# Package type must be one of: go, yarn, docker, generic
type: generic
# Sources list all sources of this package. Entries can be double-star globs and are relative to the component root.
# Avoid listing sources outside the component folder.
srcs:
- "**/*.yaml"
- "glob/**/path"
# Deps list dependencies to other packages which must be built prior to building this package. How these dependencies are made
# available during build depends on the package type.
deps:
- some/other:package
# Argdeps makes build arguments version relevant. I.e. if the value of a build arg listed here changes, so does the package version.
argdeps:
- someBuildArg
# Env is a list of key=value pair environment variables available during package build
env:
- CGO_ENABLED=0
# Config configures the package build depending on the package type. See below for details
config:
  ...

Go packages

config:
  # Packaging method. See https://godoc.org/github.com/gitpod-io/leeway/pkg/leeway#GoPackaging for details. Defaults to library.
  packaging: library
  # If true leeway runs `go generate -v ./...` prior to testing/building. Defaults to false.
  generate: false
  # If true disables `go test -v ./...`
  dontTest: false
  # If true disables the enforcement of `go fmt`. By default, if the code is not gofmt'ed the build fails.
  dontCheckGoFmt: false
  # If true disables the linting stage.
  dontLint: false
  # Overrides the `go build .` command. Supersedes buildFlags.
  buildCommand: []
  # [DEPRECATED: use buildCommand instead] A list of flags passed to `go build`. Useful for passing `ldflags`.
  buildFlags: []
  # Command that's executed to lint the code
  lintCommand: ["golangci-lint", "run"]
  # GoMod can point to a go.mod file outside the component root. Leeway expects a go.sum alongside the go.mod.
  goMod: "../go.mod"

Yarn packages

config:
  # yarnlock is the path to the yarn.lock used to build this package. Defaults to `yarn.lock`. Useful when building packages in a Yarn workspace setup.
  # Automatically added to the package sources.
  yarnlock: "yarn.lock"
  # tsconfig is the path to the tsconfig.json used to build this package. Detauls to `tsconfig.json`
  # Automatically added to the package sources.
  tsconfig: "tsconfig.json"
  # packaging method. See https://godoc.org/github.com/gitpod/leeway/pkg/leeway#YarnPackaging for details.
  # Defaults to library
  packaging: library
  # If true disables `yarn test`
  dontTest: false
  # commands overrides the default commands executed during build
  commands:
    install: ["yarn", "install"]
    build: ["yarn", "build"]
    test: ["yarn", "test"]

Docker packages

config:
  # Dockerfile is the name of the Dockerfile to build. Automatically added to the package sources.
  dockerfile: "Dockerfile"
  # Metadata produces a metadata.yaml file in the resulting package tarball.
  metadata:
    foo: bar
  # build args are Docker build arguments. Often we just pass leeway build arguments along here.
  buildArgs:
  - arg=value
  - other=${someBuildArg}
  # image lists the Docker tags leeway will use and push to
  image:
  - gitpod/leeway:latest
  - gitpod/leeway:${__pkg_version}

The first image name of each Docker dependency which pushed an image will result in a build argument. This mechanism enables a package to build the base image for another one, by using the build argument as FROM value. The name of this build argument is the package name of the dependency, transformed as follows:

  • / is replaced with _
  • : is replaced with __
  • all uppercase.

E.g. component/nested:docker becomes COMPONENT_NESTED__DOCKER.

Generic packages

config:
  # A list of commands to execute. Beware that the commands are not executed in a shell. If you need shell features (e.g. wildcards or pipes),
  # wrap your command in `sh -c`. Generic packages without commands result in an empty tar file.
  commands:
  - ["echo", "hello world"]
  - ["sh", "-c", "ls *"]

Dynaimc package scripts

Packages can be dynamically produced within a component using a dynamic package script named BUILD.js. This ECMAScript 5.1 file is executed using Goja and produces a packages array which contains the package struct much like they'd exist within the BUILD.yaml. For example:

Leeway interacts with the script using global variables, specifically:

  • args [input] a JavaScript object containing the build arguments which have explicitely been passed to leeway.
  • packages [output] where the script produces an array of package structures akin to those found in a BUILD.yaml file.

BUILD.js file

let packages = [];

let deps = [];
for(let i = 0; i < 5; i++) {
  const name = "hello-"+i;
  deps.push(name);
  packages.push({
    name: name,
    type: "generic",
    config: {
      commands: [
        ["echo", args.msg + ": hello from "+i]
      ]
    }
  });
}

packages.push({
  name: "all",
  type: "generic",
  deps: deps.map(d => ":" + d),
})

Equivalent BUILD.yaml

pacakages:
- name: all
  type: generic
  deps:
    - hello-1
    - hello-2
    - hello-3
    - hello-4
    - hello-5
- name: hello-1
  type: generic
  config:
    commands:
      - ["echo", "${msg}: hello from 1"]
- name: hello-2
  type: generic
  config:
    commands:
      - ["echo", "${msg}: hello from 2"]
- name: hello-3
  type: generic
  config:
    commands:
      - ["echo", "${msg}: hello from 3"]
...

Note that for a BUILD.js to become effective/be recodnized there needs to a (possibly empty) BUILD.yaml in the same directory.

Build arguments

In a package definition one can use build arguments. Build args have the form of ${argumentName} and are string-replaced when the package is loaded. It's advisable to use build args only within the config section of packages. Constants and built-in build args do not even work outside of the config section.

Leeway supports built-in build arguments:

  • __pkg_version resolves to the leeway version hash of a component.
  • __git_commit contains the current Git commit if the build is executed from within a Git working copy. If this variable is used and the build is not executed from within a Git working copy the variable resolution will fail. If the package sources contain uncommitted files/directories, then __pkg_version will be appended to __git_commit
  • __git_commit_short shortened version of __git_commit to the first 7 characters.

Package Variants

Leeway supports build-time variance through "package variants". Those variants are defined on the workspace level and can modify the list of sources, environment variables and config of packages. For example consider a WORKSPACE.YAML with this variants section:

variants:
- name: nogo
  srcs:
    exclude:
    - "**/*.go"
  config:
    go:
      buildFlags:
        - tags: foo

This workspace has a (nonsensical) nogo variant that, when enabled, excludes all go source files from all packages. It also changes the config of all Go packages to include the -tags foo flag. You can explore the effects of a variant using collect and describe, e.g. leeway --variant nogo collect files vs leeway collect files. You can list all variants in a workspace using leeway collect variants.

Environment Manifest

Leeway does not control the environment in which it builds the packages, but assumes that all required tools are available already (e.g. go or yarn). This however can lead to subtle failure modes where a package built in one enviroment ends up being used in another, because no matter of the environment they were built in, they get the same version.

To prevent such issues, leeway computes an environment manifest which contains the versions of the tools used, as well as some platform information. The entries in that manifest depend on the package types used by that workspace, e.g. if only Go packages exist in the workspace, only go version, GOOS and GOARCH will be part of the manifest. You can inspect a workspace's environment manifest using leeway describe environment-manifest.

You can add your own entries to a workspace's environment manifest in the WORKSPACE.yaml like so:

environmentManifest:
  - name: gcc
    command: ["gcc", "--version"]

Using this mechanism you can also overwrite the default manifest entries, e.g. "go" or "yarn".

Configuration

Leeway is configured exclusively through the WORKSPACE.yaml/BUILD.yaml files and environment variables. The following environment variables have an effect on leeway:

  • LEEWAY_WORKSPACE_ROOT: Contains the path where to look for a WORKSPACE file. Can also be set using --workspace.
  • LEEWAY_REMOTE_CACHE_STORAGE: Defines the remote caching storage provider. Valid values are "GCP" and "AWS". Defaults to "GCP".
  • LEEWAY_REMOTE_CACHE_BUCKET: Enables remote caching using GCP or S3 buckets. Required credentials depend on the storage provider:
  • LEEWAY_CACHE_DIR: Location of the local build cache. The directory does not have to exist yet.
  • LEEWAY_BUILD_DIR: Working location of leeway (i.e. where the actual builds happen). This location will see heavy I/O which makes it advisable to place this on a fast SSD or in RAM.
  • LEEWAY_YARN_MUTEX: Configures the mutex flag leeway will pass to yarn. Defaults to "network". See https://yarnpkg.com/lang/en/docs/cli/#toc-concurrency-and-mutex for possible values.
  • LEEWAY_EXPERIMENTAL: Enables exprimental features

Provenance (SLSA) - EXPERIMENTAL

leeway can produce provenance information as part of a build. At the moment only SLSA is supported. This supoprt is experimental.

Provenance generation is enabled in the WORKSPACE.YAML file.

provenance:
  enabled: true
  slsa: true

Once enabled, all packages carry an attestation bundle which is compliant to the SLSA v0.2 spec in their cached archive. The bundle is complete, i.e. not only contains the attestation for the package build, but also those of its dependencies.

Dirty vs clean Git working copy

When building from a clean Git working copy, leeway will use a reference to the Git remote origin as material (part of the SLSA link).

Signing attestations

To support SLSA level 2, leeway can sign the attestations it produces. To this end, you can provide the filepath to a key either as part of the WORKSPACE.yaml or through the LEEWAY_PROVENANCE_KEYPATH environment variable.

Inspecting provenance

You can inspect the generated attestation bundle by extracting it from the built and cached archive. For example:

# run a build
leeway build //:app

# export the attestation bundle
leeway provenance export //:app

# export the decoded attestation bundle
leeway provenance export --decode //:app

# verify that all material came from a Git repo
leeway provenance assert --git-only //:app

# verify that all subjects were built using leeway
leeway provenance asert --built-with-leeway //:app

# decode an attestation bundle from a file (also works for assertions)
leeway provenance export --decode file://some-bundle.jsonl

Caveats

  • provenance is part of the leeway package version, i.e. when you enable provenance that will naturally invalidate previously built packages.
  • if attestation bundle entries grow too large this can break the build process. Use LEEWAY_MAX_PROVENANCE_BUNDLE_SIZE to set the buffer size in bytes. This defaults to 2MiB. The larger this buffer is, the larger bundle entries can be used, but the more memory the build process will consume. If you exceed the default, inspect the bundles first (especially the one that fails to load) and see if the produced subjects make sense.

Debugging

When a build fails, or to get an idea of how leeway assembles dependencies, run your build with leeway build -c local (local cache only) and inspect your $LEEWAY_BUILD_DIR.

CLI tips

How can I build a package in the current component/folder?

leeway build .:package-name

Is there bash autocompletion?

Yes, run . <(leeway bash-completion) to enable it. If you place this line in .bashrc you'll have autocompletion every time.

How can I find all packages in a workspace?

# list all packages in the workspace
leeway collect
# list all package names using Go templates
leeway collect -t '{{ range $n := . }}{{ $n.Metadata.FullName }}{{"\n"}}{{end}}'
# list all package names using jq
leeway collect -o json | jq -r '.[].metadata.name'

How can I find out more about a package?

# print package description on the console
leeway describe some/components:package
# dump package description as json
leeway describe some/components:package -o json

How can I inspect a packages depdencies?

# print the dependency tree on the console
leeway describe dependencies some/components:package
# print the denendency graph as Graphviz dot
leeway describe dependencies --dot some/components:package
# serve an interactive version of the dependency graph
leeway describe dependencies --serve=:8080 some/components:package

How can I print a component constant?

# print all constants of the component in the current working directory
leeway describe const .
# print all constants of a component
leeway describe const some/component/name
# print the value of the `someName` constant of `some/component/name`
leeway describe const some/component/name -o json | jq -r '.[] | select(.name=="foo").value'

How can I find all components with a particular constant?

leeway collect components -l someConstant

How can I export only a workspace the way leeway sees it, i.e. based on the packages?

LEEWAY_EXPERIMENTAL=true leeway export --strict /some/destination

Contributing

Creating a new release

Releases of Leeway are created by the release workflow which uses goreleaser/goreleaser-action.

To create a new release create a new Git tag and push it:

git tag vX.X.X
git push origin vX.X.X

This will trigger the workflow which you can find here. Once it's done a new release will show up in GitHub here.

More Repositories

1

gitpod

The developer platform for on-demand cloud development environments to create software faster and more securely.
TypeScript
12,378
star
2

workspace-images

Ready to use docker images for Gitpod workspaces
Dockerfile
470
star
3

website

Gitpod website and documentation
Svelte
327
star
4

self-hosted

DEPRECATED since Gitpod 0.5.0; use https://github.com/gitpod-io/gitpod/tree/master/chart and https://github.com/gitpod-io/gitpod/tree/master/install/helm
Go
222
star
5

dazzle

dazzle is a rather experimental Docker image builder which builds independent layers
Go
199
star
6

browser-extension

The browser extension for gitpod.io. Works with Chrome and Firefox.
TypeScript
135
star
7

definitely-gp

External `.gitpod.yml` files.
Dockerfile
94
star
8

openvscode-releases

This repo is only to produce releases for OpenVSCode Server.
JavaScript
92
star
9

contribute.dev

A list of cool open-source projects that you can contribute to with one click
JavaScript
80
star
10

retired-gatsby-website

Gitpod website and documentation
TypeScript
68
star
11

full-stack-web-development

The source code for the "Full Stack Web Development in the Cloud" course.
Svelte
66
star
12

gitpod-eks-guide

This repo is being deprecated in favor of the single cluster reference architecture and the corresponding Terraform config.
Shell
51
star
13

run-gp

Run a local workspace using the .gitpod.yml
Go
47
star
14

roadmap

๐Ÿ—บ๏ธ The public roadmap for Gitpod
46
star
15

template-k3s

The k3s template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral Kubernetes development environments in the cloud.
Shell
38
star
16

gitpod-gke-guide

Running Gitpod in Google Kubernetes Engine
Shell
37
star
17

template-nixos

The NixOS template, configured for Gitpod (www.gitpod.io) to give you pre-built, nix based ephemeral operating system environments in the cloud.
Nix
35
star
18

optimus

An ordinary discord bot that empowers the @gitpod-io and @supremegamers Discord servers
Rust
27
star
19

gitpod-vscode-desktop

Gitpod Support for VS Code
TypeScript
25
star
20

gitpod-microsoft-aks-guide

Running Gitpod in Azure AKS
Shell
20
star
21

devxconf.org

TypeScript
19
star
22

NextSimpleStarter

Fork from https://github.com/ooade/NextSimpleStarter
JavaScript
18
star
23

gitpod-bot

A GitHub App built with Probot that opens issues and pull requests in Gitpod.
TypeScript
18
star
24

flutter_stock_example

The Flutter stock example configured for Gitpod
Dart
18
star
25

gitpod-mobile-ios

Something unofficial @ghuntley is hacking on out of hours and on weekends from time to time. Wanna help out?
Ruby
18
star
26

go-gin-app

Fork from https://github.com/demo-apps/go-gin-app.git
Go
17
star
27

apache-example

Dockerfile
13
star
28

devx-community

A dedicated space for developer experience
Svelte
13
star
29

community

Home for the Gitpod community ๐Ÿชด
13
star
30

gitbot

GitHub bot for gitpod
Go
13
star
31

dockerfreeze

Freeze your development environment as a Dockerfile
Rust
12
star
32

template-hugo

This is a Hugo template configured for ephemeral development environments on Gitpod.
HTML
10
star
33

.github

Defaults for Community Health
10
star
34

beans

Beans, beans, beans!
10
star
35

template-jetbrains-pycharm

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains PyCharm.
10
star
36

gitpod-status

This archived repository contains information about service incidents that occurred prior to the 30th of April 2021.
Dockerfile
10
star
37

gh-gp

A gh extension to work with GitHub repositories with Gitpod.
Shell
10
star
38

flutter-example

A Flutter Web Example
Dart
9
star
39

CDE-Universe

Repository for CDE Universe '23 Website
Svelte
9
star
40

devx-community-legacy

To hold devx community content
8
star
41

template-terraform-aws

This is a Terraform-AWS template configured for ephemeral development environments on Gitpod.
HCL
8
star
42

template-jetbrains-intellij-idea

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains IntelliJ IDEA.
8
star
43

browser-bookmarklet

The browser bookmarklet for gitpod.io. Works with Chrome, Firefox and Safari.
TypeScript
8
star
44

gitpod-vscode-theme

Gitpod Theme for VS Code
8
star
45

demo-multi-repo-frontend

8
star
46

observability

Go
7
star
47

create-react-app

Basic React App
JavaScript
7
star
48

template-gitpod-sxs-codespaces

A template that demonstrates how to have isomorphic developer environments between Gitpod and GitHub Codespaces
Rust
7
star
49

template-jetbrains-phpstorm

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains PhpStorm.
6
star
50

template-meteor

6
star
51

xterm-web-ide

The xterm.js web IDE aka The Browser Terminal
TypeScript
6
star
52

firebase-on-gitpod

Example repository and proof of concept for firebase on gitpod
Dockerfile
6
star
53

gitpod-code

Home of the VS Code Browser Gitpod built-in extensions
TypeScript
6
star
54

rm-rf

Deletes everything, but, hey, itโ€™s okay because Gitpod is an ephemeral sandbox. Run as many times as you want!
6
star
55

nginx-example

Dockerfile
6
star
56

gitpod-qa

TypeScript
6
star
57

gitpod-docs

DEPRECATED. Gitpod's documentation is here: https://github.com/gitpod-io/website/tree/master/src/docs
JavaScript
5
star
58

template-ibm-i

5
star
59

gce-github-runner

Shell
5
star
60

theia-app

The Theia running in Gitpod
TypeScript
5
star
61

template-microsoft-mssql-server

This is a Microsoft SQL Server via Docker Compose template configured for ephemeral development environments on Gitpod.
4
star
62

support-bundle

Tooling that generates a support bundle that contains logs and system information that can be used to diagnose and resolve problems with Gitpod Self-Hosted installations.
4
star
63

template-typescript-node-tabnine

SCSS
4
star
64

gitpod-yml-inferrer

Gitpod .gitpod.yml inference logic
TypeScript
4
star
65

template-all

A Gitpod multi-repo workspace for all template-* repositories.
4
star
66

template-jetbrains-webstorm

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains WebStorm.
4
star
67

demo-multi-repo-backend

3
star
68

spring-boot-demo

A simple spring boot demo
3
star
69

template-custom-org-repo

Use custom organization repository without installing Gitpod app
3
star
70

template-dynamic-workspace-location-and-tasks

3
star
71

template-java-spring-boot

Java
3
star
72

gh-app-auth

JavaScript
3
star
73

template-jetbrains-rider

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains Rider.
3
star
74

emoji-search

JavaScript
3
star
75

template-jetbrains-goland

A template, configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud via JetBrains GoLand.
3
star
76

template-amazonlinux

This templates demonstrates the use amazonlinux with Gitpod
2
star
77

gitpod-test-repo

This repo is being used by automated tests from gitpod-io/gitpod
JavaScript
2
star
78

gitpodify

A simple site to generate useful resources for Gitpodification, including "open in gitpod" buttons and sample configuration scripts
Svelte
2
star
79

template-selective-services

Start selective services via Gitpod tasks (example)
2
star
80

template-golang-cli-tabnine

Go
2
star
81

template-keystonejs

2
star
82

test

2
star
83

template-java-spring-boot-gradle

Java
2
star
84

non-gitpodified-repo

Repo that does not have .gitpod.yml yet, used for testing only.
Go
2
star
85

rickroll

does exactly what you think it does.
2
star
86

videos

Making neat videos about coding without friction
2
star
87

template-hy

The Hy template, configured for Gitpod (www.gitpod.io) to give you pre-built ephemeral development environments in the cloud.
Hy
2
star
88

empty

This repository intentionally left blank
2
star
89

gitpod-yml-schema

[MOVED] `.gitpod.yml` configuration file schema
2
star
90

example-rust-rocket

A starter project for building a web backend with Rocket in Rust
Dockerfile
2
star
91

template-python-flask-tabnine

Python
2
star
92

demo-xterm-ide

A simple IDE for the browser
1
star
93

template-fedora

Example repo using Fedora as workspace image
1
star
94

glu

Python
1
star
95

monitoring-cell

Go
1
star
96

exheredpod

(WIP) Custom downstream management designed for paludis package manager in gitpod
1
star
97

template-template

A <FRAMEWORK> template[, written in <LANGUAGE>], configured for Gitpod (www.gitpod.io) to give you pre-built, ephemeral development environments in the cloud.
1
star
98

oracle-devtools-demo

A repo for testing the Oracle DevTools VS Code Extension
1
star
99

search.gitpod-dev.com

HTML
1
star
100

template-python-django-tabnine

Python
1
star