Skip to content

Repository files navigation

gomnibus-gitlab

A gomnibus port of omnibus-gitlab — builds self-contained GitLab Community Edition packages (.deb, .rpm, .tar.gz) from declarative YAML definitions.

CI Go version License

gomnibus-gitlab translates the Ruby Omnibus DSL from omnibus-gitlab into gomnibus YAML definitions. No Ruby, no Bundler, no Gemfile — just gomnibus build gitlab.


What it builds

Component Version Description
GitLab Rails 17.11.0 Main GitLab web application
Gitaly 17.11.0 Git operations service
GitLab Shell 14.43.0 SSH access and Git push handler
GitLab Workhorse 17.11.0 HTTP acceleration proxy (built inside Rails repo)
GitLab Pages 17.11.0 Static site hosting service
GitLab KAS 17.11.0 Kubernetes Agent Server
Ruby 3.3.11 Runtime for Rails and Gitaly
PostgreSQL 17.10 Primary database
Valkey 7.2.11 In-memory store (Redis-compatible; replaces Redis)
Nginx 1.26.3 Reverse proxy and static file server
Git 2.47.0 Git SCM binary
Node.js 22.11.0 Required for asset compilation
Prometheus 3.11.2 Metrics collection
Alertmanager 0.31.1 Alert routing
node-exporter 1.9.1 Host metrics exporter
redis-exporter 1.86.0 Valkey metrics exporter
postgres-exporter 0.19.1 PostgreSQL metrics exporter
runit 2.1.2 Process supervision
logrotate 3.22.0 Log rotation

Base libraries (from gomnibus-software): zlib, OpenSSL, libffi, libyaml, ncurses, bzip2, curl, CA certificates

GitLab-specific libraries (in this repo): pcre2, libedit, jemalloc, libicu, libxml2, libxslt, libiconv, libossp-uuid, libevent


Prerequisites

  • gomnibus: go install github.com/syntaxroot-cc/gomnibus/cmd/gomnibus@latest
  • Standard build tools: gcc, make, autoconf, cmake, pkg-config
  • Platform package requirements — see CONTRIBUTING.md

Quick start

git clone https://github.com/syntaxroot-cc/gomnibus-gitlab
cd gomnibus-gitlab
git submodule update --init          # pulls lib/gomnibus-software

# Validate all definitions without building
gomnibus validate gitlab

# Full build (takes several hours the first time; subsequent builds use the cache)
gomnibus build gitlab

# Packages land in pkg/
ls pkg/
# gitlab_17.11.0-1_amd64.deb
# gitlab-17.11.0-1.x86_64.rpm
# gitlab-17.11.0-1.tar.gz

Layout

gomnibus.yaml                  # global config (cache settings, software_dirs)
config/
  projects/
    gitlab.yaml                # GitLab CE project definition
  software/
    *.yaml                     # component definitions (25 components)
lib/
  gomnibus-software/           # git submodule — shared base library
validate/
  validate_test.go             # CI validation suite (go test ./validate/...)
.kitchen.yml                   # Test Kitchen config (Docker integration tests)
.github/
  workflows/ci.yml             # GitHub Actions CI
  dependabot.yml               # weekly gomod + actions updates

Build cache

Enable S3 caching for faster builds across machines:

# gomnibus.yaml
use_git_caching: true
use_s3_caching: true
s3_bucket: my-gomnibus-cache
s3_region: us-east-1

The first build populates the cache; subsequent builds skip unchanged components.


Version overrides

Pin any component to a specific version without editing the software definition:

# config/projects/gitlab.yaml
overrides:
  - name: postgresql
    version: "16.8"
  - name: ruby
    version: "3.3.10"

Test Kitchen

Integration tests build GitLab packages inside Docker containers and verify the package installs correctly:

gomnibus kitchen list           # show platform status
gomnibus kitchen test ubuntu    # build + install + verify on Ubuntu 22.04
gomnibus kitchen test           # all platforms

Comparison with omnibus-gitlab

Aspect omnibus-gitlab gomnibus-gitlab
DSL Ruby YAML
Build tool omnibus gem (Ruby) gomnibus (Go binary)
Definition files config/software/*.rb config/software/*.yaml
Project file config/projects/gitlab.rb config/projects/gitlab.yaml
Dependency resolution Ruby Omnibus gomnibus topological sort
Version pinning Gitlab::Version.new(...) overrides: in project YAML
Multi-version blocks Ruby DSL versions: in software YAML
Build caching git-based content-addressable + S3
Package formats deb, rpm deb, rpm, tar.gz
Install dir /opt/gitlab /opt/gitlab
Embedded libs path /opt/gitlab/embedded/ /opt/gitlab/embedded/

License

Apache License 2.0 — see LICENSE.

Based on omnibus-gitlab © GitLab, Inc. (Apache 2.0).

About

gomnibus port of omnibus-gitlab — build GitLab CE packages from YAML definitions

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages