ci

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 12, 2026 License: MIT Imports: 2 Imported by: 0

README

libtiff CI/CD Pipeline

This is libtiff's CI/CD pipeline, imported from libtiff/libtiff.

Overview

libtiff is a library for reading and writing Tagged Image File Format (TIFF) files. This pipeline demonstrates C library development, testing, and distribution.

Pipeline Characteristics

  • Project ID: 4720790
  • Lines of Code: ~309 lines
  • Language: C
  • Features Demonstrated:
    • C library testing
    • Cross-platform builds
    • Autotools/CMake integration
    • Memory safety testing (Valgrind, ASan)
    • Format compliance testing

Key Features

Multi-Platform Builds

Supports Linux, macOS, Windows with different compilers.

Memory Safety Testing

Valgrind and AddressSanitizer integration for memory safety.

Format Compliance

Comprehensive testing of TIFF format reading and writing.

Library Distribution

Packaging and distribution of shared/static libraries.

What You Can Learn

  1. C library CI/CD - Testing and distributing C libraries
  2. Memory safety - Using Valgrind and sanitizers
  3. Format handling - Testing file format implementations
  4. Cross-platform C - Building C code on multiple platforms
  5. Library packaging - Creating distributable libraries

Source

Building This Example

cat pipeline.go
mkdir my-libtiff-pipeline && cp pipeline.go my-libtiff-pipeline/
cd my-libtiff-pipeline && go mod init example/my-libtiff-pipeline && go mod tidy

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BasicBuild = pipeline.Job{
	Name:   "basic-build",
	Stage:  "pre-build",
	Script: List("sh build/gitlab-ci cmake \"Unix Makefiles\" Debug static"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var BasicBuildFork = pipeline.Job{
	Name:   "basic-build-fork",
	Stage:  "pre-build",
	Script: List("sh build/gitlab-ci cmake \"Unix Makefiles\" Debug static"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH != \"libtiff/libtiff\"",
		},
	),
	Tags: List("saas-linux-small-amd64"),
}
View Source
var ClangCppCompat = pipeline.Job{
	Name:   "clang-cpp-compat",
	Stage:  "compat",
	Script: List("sh build/gitlab-ci cmake Ninja Debug cxxcompat"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("freebsd15"),
}
View Source
var Coverity = pipeline.Job{
	Name:   "coverity",
	Stage:  "static-analysis",
	Script: List("sh build/gitlab-ci coverity \"Ninja\" Debug"),
	Image:  pipeline.Image{Name: "registry.gitlab.com/libtiff/libtiff-ci-ubuntu24.04-coverity:latest"},
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\" && $CI_COMMIT_BRANCH == \"master\"",
		},
	),
}
View Source
var Freebsd15Debug = pipeline.Job{
	Name:   "freebsd15-debug",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake Ninja Debug"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("freebsd15"),
}
View Source
var Freebsd15Release = pipeline.Job{
	Name:   "freebsd15-release",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake Ninja Release"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("freebsd15"),
}
View Source
var GccCppCompat = pipeline.Job{
	Name:   "gcc-cpp-compat",
	Stage:  "compat",
	Script: List("sh build/gitlab-ci cmake \"Ninja\" Debug cxxcompat"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var LinuxAcCurrent = pipeline.Job{
	Name:        "linux-ac-current",
	Stage:       "build",
	Script:      List("sh build/gitlab-ci autoconf"),
	AfterScript: List("cat autoconf-build/test/test-suite.log"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Artifacts: pipeline.Artifacts{
		Paths: List("distribution"),
		Name:  "distribution",
	},
}
View Source
var LinuxAcOld = pipeline.Job{
	Name:        "linux-ac-old",
	Stage:       "build",
	Script:      List("sh build/gitlab-ci autoconf-minimal"),
	AfterScript: List("cat autoconf-build/test/test-suite.log"),
	Image:       pipeline.Image{Name: "registry.gitlab.com/libtiff/libtiff-ci-ubuntu22.04:latest"},
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var LinuxCmakeMakeCurrent = pipeline.Job{
	Name:   "linux-cmake-make-current",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake \"Unix Makefiles\" Release"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var LinuxCmakeMakeCurrentStatic = pipeline.Job{
	Name:   "linux-cmake-make-current-static",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake \"Unix Makefiles\" Release static"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var LinuxCmakeMakeOld = pipeline.Job{
	Name:   "linux-cmake-make-old",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake \"Unix Makefiles\" Release"),
	Image:  pipeline.Image{Name: "registry.gitlab.com/libtiff/libtiff-ci-ubuntu22.04:latest"},
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var LinuxCmakeNinjaCurrent = pipeline.Job{
	Name:   "linux-cmake-ninja-current",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake \"Ninja\" Debug"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
}
View Source
var Macos26Debug = pipeline.Job{
	Name:   "macos26-debug",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake Ninja Debug"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("macos26"),
}
View Source
var Macos26Release = pipeline.Job{
	Name:   "macos26-release",
	Stage:  "build",
	Script: List("sh build/gitlab-ci cmake Ninja Release"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("macos26"),
}
View Source
var MainPipeline = pipeline.Pipeline{
	Stages: List("pre-build", "compat", "build", "static-analysis", "pages"),
}
View Source
var Pages = pipeline.Job{
	Name:   "pages",
	Stage:  "pages",
	Script: List("sh build/gitlab-ci cmake \"Ninja\" Debug", "cp -r cmake-install/share/doc/tiff/manual/html public"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\" && $CI_COMMIT_BRANCH == \"master\"",
		},
	),
	Artifacts: pipeline.Artifacts{
		Paths: List("public"),
		Name:  "$CI_PROJECT_NAME-$CI_JOB_NAME",
	},
}
View Source
var WindowsCygwinDebug = pipeline.Job{
	Name:   "windows-cygwin-debug",
	Stage:  "build",
	Script: List("$cygpath = & \"C:\\tools\\cygwin\\bin\\cygpath.exe\" -u $env:CI_PROJECT_DIR; & \"C:\\tools\\cygwin\\bin\\bash.exe\" -l -c \"cd '$cygpath' && bash build/gitlab-ci-cygwin Ninja Debug\""),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "cygwin"),
}
View Source
var WindowsCygwinRelease = pipeline.Job{
	Name:   "windows-cygwin-release",
	Stage:  "build",
	Script: List("$cygpath = & \"C:\\tools\\cygwin\\bin\\cygpath.exe\" -u $env:CI_PROJECT_DIR; & \"C:\\tools\\cygwin\\bin\\bash.exe\" -l -c \"cd '$cygpath' && bash build/gitlab-ci-cygwin Ninja Release\""),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "cygwin"),
}
View Source
var WindowsMingwDebug = pipeline.Job{
	Name:   "windows-mingw-debug",
	Stage:  "build",
	Script: List("$mingwpath = & \"C:\\tools\\msys64\\usr\\bin\\cygpath.exe\" -u $env:CI_PROJECT_DIR; & \"C:\\tools\\msys64\\usr\\bin\\bash.exe\" -l -c \"cd '$mingwpath' && bash build/gitlab-ci-mingw Ninja Release\""),
	Variables: Json{
		"MSYSTEM":        "UCRT64",
		"CHERE_INVOKING": "1",
	},
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "mingw"),
}
View Source
var WindowsMingwRelease = pipeline.Job{
	Name:   "windows-mingw-release",
	Stage:  "build",
	Script: List("$mingwpath = & \"C:\\tools\\msys64\\usr\\bin\\cygpath.exe\" -u $env:CI_PROJECT_DIR; & \"C:\\tools\\msys64\\usr\\bin\\bash.exe\" -l -c \"cd '$mingwpath' && build/gitlab-ci-mingw Ninja Release\""),
	Variables: Json{
		"MSYSTEM":        "UCRT64",
		"CHERE_INVOKING": "1",
	},
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "mingw"),
}
View Source
var WindowsVs2022Debug = pipeline.Job{
	Name:   "windows-vs2022-debug",
	Stage:  "build",
	Script: List("pwsh build/gitlab-ci.ps1 -VSVersion 2022 Ninja Debug"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "vs2022"),
}
View Source
var WindowsVs2022Release = pipeline.Job{
	Name:   "windows-vs2022-release",
	Stage:  "build",
	Script: List("pwsh build/gitlab-ci.ps1 -VSVersion 2022 Ninja Release"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "vs2022"),
}
View Source
var WindowsVs2026Debug = pipeline.Job{
	Name:   "windows-vs2026-debug",
	Stage:  "build",
	Script: List("pwsh build/gitlab-ci.ps1 -VSVersion 2026 Ninja Debug"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "vs2026"),
}
View Source
var WindowsVs2026Release = pipeline.Job{
	Name:   "windows-vs2026-release",
	Stage:  "build",
	Script: List("pwsh build/gitlab-ci.ps1 -VSVersion 2026 Ninja Release"),
	Rules: List(
		pipeline.Rule{
			If: "$CI_PROJECT_PATH == \"libtiff/libtiff\"",
		},
	),
	Tags: List("windows", "vs2026"),
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL