mirror of
https://github.com/Sani7/remote-ui.git
synced 2026-10-27 06:01:14 +01:00
Add dagger ci support
working lint, build and test
This commit is contained in:
+133
@@ -0,0 +1,133 @@
|
||||
// A generated module for UnisimCpp functions
|
||||
//
|
||||
// This module has been generated via dagger init and serves as a reference to
|
||||
// basic module structure as you get started with Dagger.
|
||||
//
|
||||
// Two functions have been pre-created. You can modify, delete, or add to them,
|
||||
// as needed. They demonstrate usage of arguments and return types using simple
|
||||
// echo and grep commands. The functions can be called from the dagger CLI or
|
||||
// from one of the SDKs.
|
||||
//
|
||||
// The first line in this comment block is a short description line and the
|
||||
// rest is a long description with more detail on the module's purpose or usage,
|
||||
// if appropriate. All modules should have a short description.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"dagger/unisim-cpp/internal/dagger"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type UnisimCpp struct{}
|
||||
|
||||
// Run core unit tests
|
||||
func (m *UnisimCpp) Test(
|
||||
ctx context.Context,
|
||||
// Source code
|
||||
// +defaultPath="/"
|
||||
// +ignore=["build", "docs"]
|
||||
src *dagger.Directory,
|
||||
) error {
|
||||
// create container with source files
|
||||
ctr := dag.Container().From("quay.io/sani7/qt-build:latest")
|
||||
|
||||
// retrieve container architecture and provide it as ENVAR inside the container
|
||||
{
|
||||
platform, err := ctr.Platform(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// platform is of the form "linux/arm64"
|
||||
// architecture is the second par of the platform string, after the '/'
|
||||
architecture := strings.Split(string(platform), "/")[1]
|
||||
ctr = ctr.WithEnvVariable("CUBZH_ARCH", architecture)
|
||||
}
|
||||
_, err := ctr.
|
||||
// mount host directory to container and go into it
|
||||
WithMountedDirectory("/project", src).
|
||||
WithExec([]string{"mkdir", "-p", "/project/build"}).
|
||||
WithWorkdir("/project/").
|
||||
// execute build commands
|
||||
WithExec([]string{"cmake", "-S", ".", "-B", "build", "-G", "Ninja"}).
|
||||
// Flags after `--` are transmitted as-is to the build system (Ninja, here)
|
||||
// Ninja will stop if this number of errors is reached : NB_MAX_BUILD_ERRORS
|
||||
WithExec([]string{"cmake", "--build", "build", "--clean-first", "--target", "tests"}).
|
||||
// exec compiled unit tests program
|
||||
WithExec([]string{"cmake", "--build", "build", "--target", "test"}).
|
||||
Sync(ctx)
|
||||
return err
|
||||
}
|
||||
|
||||
// Lint the core source code
|
||||
func (m *UnisimCpp) Lint(
|
||||
ctx context.Context,
|
||||
// Source directory
|
||||
// +defaultPath="/"
|
||||
// +ignore=["*", "!client", "!server", "!tests", "!UI"]
|
||||
src *dagger.Directory,
|
||||
) error {
|
||||
_, err := m.Format(ctx, src, true)
|
||||
return err
|
||||
}
|
||||
|
||||
// Format the source code using clang tools
|
||||
func (m *UnisimCpp) Format(
|
||||
ctx context.Context,
|
||||
// Source code to format
|
||||
// +defaultPath="/"
|
||||
// +ignore=["*", "!client", "!server", "!tests", "!UI"]
|
||||
src *dagger.Directory,
|
||||
// Only check, don't fix
|
||||
// +optional
|
||||
check bool,
|
||||
) (*dagger.Directory, error) {
|
||||
var script string
|
||||
if check {
|
||||
// set -e: exit on first error
|
||||
// set -o pipefail: keep the last non-0 exit code
|
||||
// -regex: all .h / .hpp / .c / .cpp files
|
||||
// -maxdepth 2: consider the files in /core and /core/tests
|
||||
// // --dry-run: do not apply changes
|
||||
script = `set -e ; set -o pipefail ; find . -maxdepth 2 -regex '^.*\\.\\(cpp\\|hpp\\|c\\|h\\)$' -print0 | xargs -0 clang-format --dry-run --Werror -style=file`
|
||||
} else {
|
||||
// -i: apply changes
|
||||
// --Werror: consider warnings as errors
|
||||
// -style-file: follow the rules from the .clang-format file
|
||||
script = `set -e ; set -o pipefail ; find . -maxdepth 2 -regex '^.*\\.\\(cpp\\|hpp\\|c\\|h\\)$' -print0 | xargs -0 clang-format -i --Werror -style=file`
|
||||
}
|
||||
output := dag.
|
||||
Container().
|
||||
From("gaetan/clang-tools").
|
||||
WithMountedDirectory("/project", src).
|
||||
WithWorkdir("/project").
|
||||
WithExec([]string{"ash", "-c", script}).
|
||||
Directory(".")
|
||||
if check {
|
||||
return output.Sync(ctx)
|
||||
}
|
||||
return output, nil
|
||||
}
|
||||
|
||||
// Build the UnisimCpp project
|
||||
func (m *UnisimCpp) Build(
|
||||
ctx context.Context,
|
||||
// Source code
|
||||
// +defaultPath="/"
|
||||
// +ignore=["build", "docs"]
|
||||
src *dagger.Directory,
|
||||
) (*dagger.Directory, error) {
|
||||
ctr := dag.Container().From("quay.io/sani7/qt-build:latest")
|
||||
output := ctr.
|
||||
// mount host directory to container and go into it
|
||||
WithMountedDirectory("/project", src).
|
||||
WithExec([]string{"mkdir", "-p", "/project/build"}).
|
||||
WithWorkdir("/project/").
|
||||
// execute build commands
|
||||
WithExec([]string{"cmake", "-S", ".", "-B", "build", "-G", "Ninja"}).
|
||||
// Flags after `--` are transmitted as-is to the build system (Ninja, here)
|
||||
WithExec([]string{"cmake", "--build", "build", "--clean-first", "--target", "all"}).
|
||||
Directory(".")
|
||||
return output.Sync(ctx)
|
||||
}
|
||||
Reference in New Issue
Block a user