A Distributed Continuous Integration System from MongoDB

Evergreen

Evergreen is a distributed continuous integration system built by MongoDB. It dynamically allocates hosts to run tasks in parallel across many machines.

See the wiki for user-facing documentation.

See the API docs for developer documentation. For an overview of the architecture, see the list of directories and their descriptions at the bottom of that page.

Features

Elastic Host Allocation

Use only the computing resources you need.

Clean UI

Easily navigate the state of your tests, logs, and commit history.

Multiplatform Support

Run jobs on any platform Go can cross-compile to.

Spawn Hosts

Spin up a copy of any machine in your test infrastructure for debugging.

Patch Builds

See test results for your code changes before committing.

Stepback on Failure

Automatically run past commits to pinpoint the origin of a test failure.

Go Requirements

Building the Binaries

Setup:

  • ensure that your GOPATH environment variable is set.
  • check out a copy of the repo into your gopath. You can use: go get github.com/evergreen-ci/evergreen. If you have an existing checkout of the evergreen repository that is not in $GOPATH/src/github.com/evergreen-ci/ move or create a symlink.

Possible Targets:

  • run make build to compile a binary for your local system.
  • run make dist to compile binaries for all supported systems and create a dist tarball with all artifacts.
Owner
Evergreen
A distributed, elastic continuous integration tool from MongoDB
Evergreen
Comments
  • EVG-5856 add setup script to spawn hosts

    EVG-5856 add setup script to spawn hosts

    https://jira.mongodb.org/browse/EVG-5856

    After some conversations, for now we'd like this setup script to be user-defined and in the future we can look at project-defined (for hosts spawned with task data). The reason this setup script is separate from userdata is because, for hosts spawned with task data, the script should be run after artifacts are loaded, which is evidently not necessarily true for userdata. (Although we also load artifacts in userdata?)

  • EVG-16035 insert a new intent for failed hosts

    EVG-16035 insert a new intent for failed hosts

    EVG-16035

    Description

    Currently, when a task spawns a host that AWS terminates immediately after giving it to us we fail the task on host.list. This will instead insert a new host intent so we try again.

    We will insert a new intent only if the original host is still "starting". If the host went to running and then terminated the task could have moved on and this would be a waste. I've never actually seen a "running" instance terminate unexpectedly, but just in case. We also skip this if the task is not running or aborted because it would be a waste.

    I'm undecided about limiting the number of times we loop on this. I didn't do it yet, but if someone feels strongly I'm game to add it. I think it's safe to assume it's a transient error since we know the instance was created once successfully (so it's not a user error). Even if the error does persist it won't loop infinitely because host.list will eventually reach its timeout.

    Testing

    I manually terminated a task's host in staging (very carefully!) and Evergreen created a second host for the task.

  • EVG-14977 Unhide Adding and creating Patch Trigger Aliases

    EVG-14977 Unhide Adding and creating Patch Trigger Aliases

    EVG-14977

    Description

    This was kept hidden till now so that users don't start using it before it is ready. While the feature is not yet fully ready to role out, at this point, a user using it won't break it, and they'll already see the downstream tasks on the patch page.

    Testing

    none

  • EVG-7151 mount volume in home directory

    EVG-7151 mount volume in home directory

    Isolating users' data in a portable volume will facilitate migrating between instances.

    Since the script to mount a volume will depend on the distro (for instance, nitro based instances will rename block devices), add a field to the distro for the script with a placeholder for device name. Only those distros which set the script will have the option of mounting the volume.

    The UI will validate that the size requested is between 1 and 100 GB. These seemed like reasonable limits to hardcode, but I'd be open to to other limits or to making it configurable from the admin settings.

  • EVG-6364 default patch description

    EVG-6364 default patch description

    I couldn't decide the best way to go about this so I'm just putting it up.

    Editing the description here will be fine for commit queue patches since they populate the description before this.

    diffData.base includes "@{upstream} which is why I don't know that gitCommitMessages can be used. Also is using this base correct?

    If we can use gitCommitMessages then I would just strings.Split(commitsMsgs, "\n")[0].

  • EVG-6383 restart failed commit queue versions

    EVG-6383 restart failed commit queue versions

    Given a time range, we filter patches by Alias, Time, and Project. I'm filtering patches instead of versions because patches have the actual logic I'm looking for, and for commit queue this seems 1 to 1 (FinalizePatch creates a version with the same ID as the patch, and this is called for both PR and CLI).

    From these patches I reconstruct the commit queue item and re-add it to the project.

    Because this ranges first through projects and then through project patches, it's slightly inefficient; an alternative may be to get the patches for all projects and keep a hash map of projectID -> CQ, but this would only minimize the number of patch filter calls we have to make, not the number of patches we have to range over.

  • EVG-7596 consider started tasks when updating display task status

    EVG-7596 consider started tasks when updating display task status

    While I think the logic with unstartedTasks is also wrong, I think the actual case brought up in the ticket comes from the first part of this line statusTask.Status != evergreen.TaskFailed.

    I'm not 100% sure what you were trying to do in the original ticket @ybrill but given the description about SystemFailed I think we should only set display task as finished early in the system failed case (if at all).

  • EVG-8111 Not authing against corp secure properly when using performance analysis and triage service

    EVG-8111 Not authing against corp secure properly when using performance analysis and triage service

    @john-m-liu Relating to the questions asked yesterday. It seems this is sufficient to get the page I care about working; wondering whether this can be done in a better way/if we want to use this corpsecure login more generally in EVG?

  • EVG-8061: redirect opted in users from legacy patch page to Spruce reconfigure page

    EVG-8061: redirect opted in users from legacy patch page to Spruce reconfigure page

    If a user is opted into spruce v1, they will be redirected from evergreen.mongodb.com/patch/:id to spruce.mongodb.com/patch/:id/configure

    This allows us to redirect users to Spruce when they click on a patch link from the CLI

  • EVG-7200: Filter favorites out of all projects

    EVG-7200: Filter favorites out of all projects

    Having favorited projects also in all projects caused duplicate key issues when rendering the data in the projects dropdown. This PR filters favorite projects out of all projects.

  • EVG-3188 Implement fmt.Stringer for APIString

    EVG-3188 Implement fmt.Stringer for APIString

    This fixes printing errors when used in a format string such as:

    			grip.Infof("Spawn host created with ID '%s'. Visit the hosts page in Evergreen to check on its status.", host.Id)
    

    Now correctly prints:

    evergreen-ci/evergreen master Δ ./clients/darwin_amd64/evergreen host create -d rhel70-small -k mathewrobinson
    A new version is available. Run './clients/darwin_amd64/evergreen get-update --install' to download and install it.
    [evergreen] 2018/04/20 12:45:00 [p=info]: Spawn host created with ID 'evg-rhel70-small-20180420164500-1674881231148019645'. Visit the hosts page in Evergreen to check on its status.
    
  • EVG-7440 Allow updating github statuses for multiple builds at once

    EVG-7440 Allow updating github statuses for multiple builds at once

    EVG-7440

    Description

    < add description, context, thought process, etc >

    Testing

    Tested in staging. Confirmed that restarting a PR version changes all builds to status "pending" in the GitHub UI, and that manually restarting two or more separate builds accurately changes each corresponding build variant in the GitHub UI to "pending" as well.

go language generics system

Gotgo This document describes the third iteration of my attempt at a reasonable implementation of generics for go based on the idea of template packag

Dec 4, 2021
Build system and task runner for Go projects
Build system and task runner for Go projects

Gilbert is task runner that aims to provide declarative way to define and run tasks like in other projects like Gradle, Maven and etc.

Dec 21, 2022
Golang binaries compiled on-demand for your system
Golang binaries compiled on-demand for your system

Go Binaries Go Binaries is an on-demand binary server, allowing non-Go users to quickly install tools written in Go without installing go itself, and

Dec 3, 2022
Please is a cross-language high-performance extensible build system for reproducible multi-language builds.

Please is a cross-language build system with an emphasis on high performance, extensibility and reproducibility. It supports a number of popular languages and can automate nearly any aspect of your build process.

Dec 30, 2022
Blueprint Build System For Golang

Blueprint Build System Blueprint is being archived on 2021 May 3. On 2021 May 3, we will be archiving the Blueprint project. This means it will not be

Nov 20, 2021
An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers
An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers

Developer-oriented Continuous Delivery Product ⁣ English | 简体中文 Table of Contents Zadig Table of Contents What is Zadig Quick start How to use? How to

Oct 19, 2021
Blog-mongodb - this repository for educational purpose, learn how to use mongodb and use mongodb with go

ENDPOINT ENDPOINT METHOD ACCESS /register POST all /login POST all /articles GET all /articles POST all /articles/{articleId} GET all /articles/{artic

Jan 4, 2022
goveralls - Go integration for Coveralls.io continuous code coverage tracking system.

goveralls Go integration for Coveralls.io continuous code coverage tracking system. Installation goveralls requires a working Go installation (Go-1.2

Dec 25, 2022
A Sample Integration of Google and GitHub OAuth2 in Golang (GoFiber) utilising MongoDB

Go Oauth Server This is sample OAuth integration written in GoLang that also uses MongoDB. This is a sample TODO Application where people can Create a

Dec 27, 2022
Golang MongoDB Integration Examples

Get Program Get a copy of the program: git clone https://github.com/hmdhszd/Go

Feb 1, 2022
Go-mongodb - Practice Go with MongoDB because why not

Practice Mongo DB with Go Because why not. Dependencies gin-gonic go mongodb dri

Jan 5, 2022
Tapestry is an underlying distributed object location and retrieval system (DOLR) which can be used to store and locate objects. This distributed system provides an interface for storing and retrieving key-value pairs.

Tapestry This project implements Tapestry, an underlying distributed object location and retrieval system (DOLR) which can be used to store and locate

Mar 16, 2022
Zadig is a cloud native, distributed, developer-oriented continuous delivery product.

Zadig Developer-oriented Continuous Delivery Product English | 简体中文 Table of Contents Zadig Table of Contents What is Zadig Quick start How to use? Ho

Jan 8, 2023
Zadig is a cloud native, distributed, developer-oriented continuous delivery product.

Zadig Developer-oriented Continuous Delivery Product ⁣ English | 简体中文 Table of Contents Zadig Table of Contents What is Zadig Quick start How to use?

May 12, 2021
A Continuous Delivery system built on container technology
A Continuous Delivery system built on container technology

Drone is a Continuous Delivery system built on container technology. Drone uses a simple yaml configuration file, a superset of docker-compose, to def

Sep 29, 2021
Distributed-Services - Distributed Systems with Golang to consequently build a fully-fletched distributed service

Distributed-Services This project is essentially a result of my attempt to under

Jun 1, 2022
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order

Dec 28, 2022
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order

Dec 30, 2022
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order

Jan 9, 2023
Distributed reliable key-value store for the most critical data of a distributed system

etcd Note: The main branch may be in an unstable or even broken state during development. For stable versions, see releases. etcd is a distributed rel

Dec 30, 2022