Commit graph

100 commits

Author SHA1 Message Date
Gabriel Adrian Samfira
d4b7fca9f6
Fix test config_dir
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-09-06 21:35:42 +03:00
Gabriel Adrian Samfira
99856af4de
Silence gorm default logger
Disable the default logger for gorm when debug is not set on the sql
store backend. By default gorm will print error level log messages,
which includes queries which find no results, which is not really an
error.

These messages will show up if debug is enabled on the sql store
backend.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-09-06 21:35:01 +03:00
Gabriel
c0df364bb0
Merge pull request #8 from mihaelabalutoiu/add-organizations-unit-tests
Add `organizations.go` unit tests and `PoolManagerController` mocks
2022-09-06 20:12:46 +03:00
mihaelabalutoiu
1a7c31c8ea Add more organizations.go unit testing
Also, update vendor with the `github.com/stretchr/testify/suite`.
2022-09-06 18:04:51 +03:00
mihaelabalutoiu
3094ad09be Add PoolManagerController mocks 2022-09-01 16:08:56 +03:00
Gabriel
b74b829ce6
Merge pull request #7 from mihaelabalutoiu/refactor-code
Refactor code to allow more unit testing
2022-08-19 13:07:12 +03:00
Ionut Balutoiu
7b6c2e6106 Refactor code to allow more unit testing
In order to allow mocking for some of the `runner` functions, we created a
separate interface (called `PoolManagerController`) with `Create`, `Get`,
`Delete` operations for the `organization` / `repository` pool managers.

Furthermore, a new runner struct (`poolManagerCtrl`) implements this new
interface. The existing code is refactored to use the `poolManagerCtrl`
whenever the pool managers for `org` / `repo` are handled.

This allows more unit testing for the runner functions since `poolManagerCtrl`
field can be mocked now.

Besides this, there are some typos fixed as well.
2022-08-18 17:47:05 +03:00
Gabriel
ad97baac70
Merge pull request #6 from mihaelabalutoiu/add-unit-tests
Add unit tests
2022-08-01 18:08:52 +03:00
mihaelabalutoiu
a869b5d743 Add unit tests 2022-08-01 12:34:59 +03:00
Gabriel
cd4e4fb985
Merge pull request #5 from mihaelabalutoiu/dev
Fix `NewConfig` func & and add more unit tests
2022-07-26 14:24:53 +03:00
mihaelabalutoiu
229946a4c0 Add unit tests for full coverage to the NewConfig function 2022-07-26 13:43:56 +03:00
mihaelabalutoiu
795b7ebb56 Add missing assertion 2022-07-26 13:43:35 +03:00
mihaelabalutoiu
c523032c86 Fix NewConfig function
Move the default setting before validating the config, otherwise the code will
never run. This happens because the `Validate()` function will always fail when
`config.Default.ConfigDir` is empty.
2022-07-21 11:51:52 +03:00
Gabriel Adrian Samfira
067197c1b5 Fix instance JWT token expiration
The instance JWT token expiration time was set at 15 minutes, regardless
of bootstrap timeout. This meant that instances that take longer than 15
minutes, would not be able to send their status updates and github agent
ID back to garm.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-17 07:24:19 +00:00
Gabriel Adrian Samfira
5d02de92d3 Clarify external provider docs 2022-07-17 06:34:50 +00:00
Gabriel Adrian Samfira
74a1863f63 Update docs
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-16 18:14:38 +00:00
Gabriel Adrian Samfira
95db6599ff Make external provider less opinionated about executable
You can now specify the absolute path to a provider executable instead
of specifying a provider directory with a "garm-external-provider" in it.
2022-07-16 18:00:07 +00:00
Gabriel Adrian Samfira
5b651eeb3f Update example config with LXD instance type setting
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-16 13:52:38 +00:00
Gabriel Adrian Samfira
3da860eea6 Always lookup images in simplestreams
This change makes sure we always download the latest image from
simplestreams. We no longer copy labels from simplestreams so we need
to lookup the hash of the image against simplestreams. This means that
in airgapped environments, the operator will have to manually tag images
and use the tag name in favor of remote:image_name.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-16 13:47:17 +00:00
Gabriel Adrian Samfira
dede5cc465 Allow deletion of a runner in error state
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-16 13:41:26 +00:00
Gabriel Adrian Samfira
ecd476af02 Add container support to LXD provider plus fixes
* Add the ability to define an LXD provider which spins up containers
    instead of virtual machines.
  * Loading an LXD provider that is not reachable no longer crashes garm
    on startup.
  * Labels are no longer copied on image import. The LXD provider will
    resolve the image fingerprint from the simplestreams server every time.
    The image will be copied locally if a new version exists.
2022-07-12 13:34:12 +00:00
Gabriel Adrian Samfira
5566cde77f A few fixes
* CLI properly formats the IP addresses in runner show
  * LXD provider now waits for an IP address before returning on Create
  * Added a few mocks for testing

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-10 14:52:15 +00:00
Gabriel Adrian Samfira
afb1d31394 Slight cleanup
* added interface for the github client. This will help mocking it
out for testing.
  * removed some unused code
  * moved some code around

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-07 16:48:00 +00:00
Gabriel Adrian Samfira
fb0bcbe3eb Add more tests
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-06 22:08:22 +00:00
Gabriel Adrian Samfira
8ccb152312 Add some more tests and switch to require
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-06 19:21:36 +00:00
Gabriel Adrian Samfira
280cad96e4 Make runner-bootstrap-timeout optional
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-06 17:37:18 +00:00
Gabriel Adrian Samfira
874506e539 Add more tests
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-06 09:03:18 +00:00
Gabriel Adrian Samfira
535f39a1ba Make use of CORS, add more tests
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-05 19:28:50 +00:00
Gabriel Adrian Samfira
87c77f6966 Update readme, add some tests
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-07-05 17:48:25 +00:00
Gabriel Adrian Samfira
42249ede0b Set SELinux labels on host FS when building via docker/podman
Adds :z to the bind mount, ensuring the container can access the files
when SELinux is enabled.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-30 15:11:10 +00:00
Gabriel
7da2875e2b
Merge pull request #4 from pothos/building-with-podman
Support building with Podman instead of Docker
2022-06-30 14:09:01 +03:00
Kai Lueke
f052709112 Support building with Podman instead of Docker
When /usr/bin/docker is a wrapper for podman (as common no Fedora),
Podman will be used which requires the full image name including the
registry. It does not require the chown step, because this results in
the files being owned by a temporary mapped ID due to the user
namespace in rootless mode (which is the default unless Podman is run
by the root user) - make the chown a no-op by using UID/GID 0.
2022-06-30 13:06:33 +02:00
Gabriel Adrian Samfira
9e949d833f Update .gitignore
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-30 10:34:51 +00:00
Gabriel Adrian Samfira
bbbe67bf7c Vendor packages and add Makefile
* Vendors packages
  * Adds a Makefile that uses docker to build a static binary against musl
using alpine linux.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-30 10:20:32 +00:00
Gabriel Adrian Samfira
0a17578798 Properly set timeout on pool create
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-30 06:55:13 +00:00
Gabriel Adrian Samfira
15a1308441 Add timeout functionality for pool runner bootstrap
Pools can now define a bootstrap timeout for runners. The timeout can
be defined per pool and indicates the amount of time after which a runner
is considered defunct and removed.

If a runner doesn't join github in the configured amount of time, and it
receives no updates indicating that it is installing the runner via instance
status updates, it is considered defunct.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-29 23:44:03 +00:00
Gabriel Adrian Samfira
5390efbaab Add manual runner removal
Runners can now be manually removed using the CLI. Some restrictions apply:

  * A runner must be idle in github. Github will not allow us to remove a runner
that is running a workflow.
  * The runner status must be "running"

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-29 16:23:01 +00:00
Gabriel Adrian Samfira
1f419d0abc Unwrap error before comparing
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-28 16:27:03 +00:00
Gabriel Adrian Samfira
f52accc47f Add idempotency when stopping a VM and some tests
When deleting a VM, we try to force stop it. If the VM is already stopped,
LXD will return an error. Unfortunately, we can't import the drivers package
from LXD without also pulling in a bunch of linux specific CGO dependencies
which we want to avoid.

Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
2022-06-28 15:13:02 +00:00
Gabriel Adrian Samfira
b4e9af13d5 Fix tags update 2022-06-24 11:41:38 +00:00
Gabriel Adrian Samfira
846bd672ad Fix cleanup orphaned github runners 2022-06-24 11:17:34 +00:00
Gabriel Adrian Samfira
63824247be Optimize orphan cleanup and add Debian to OS list
* Runner names are unique. Skip querying pool, then runner name. Just fetch
the runner, which has a PoolID field set that can be used to determine the
pool.
  * Add Debian to the list of Linux OSs
2022-06-24 10:01:20 +00:00
Gabriel Adrian Samfira
808bc42d33 Add image alias if not there
On LXD, if the list of image aliases does not include the image name
we just fetched from the simplestreams remote, add it to the list.
2022-06-17 15:31:47 +00:00
Gabriel Adrian Samfira
a8274dcc02 Add profile management in the CLI 2022-06-17 10:58:35 +00:00
Gabriel Adrian Samfira
c089217a53
Add runner user to docker and lxd groups
Add the runner user to the docker and lxd groups. This will help avoid
the need for sudo if the workflow will require the use of either docker
or LXD.
2022-06-17 12:46:24 +03:00
Gabriel Adrian Samfira
98eb594cd6 Remove some blocking code
* added 2 new statuses: creating and deleting
  * remove wait on create/delete, speeding things up a bit
2022-05-13 23:34:16 +00:00
Gabriel Adrian Samfira
e7eb13acc9 Update readme 2022-05-13 13:24:39 +00:00
Gabriel Adrian Samfira
51b3bc816c Add some docs (WiP) 2022-05-12 21:37:53 +00:00
Gabriel
1e991795a2
Merge pull request #2 from ionutbalutoiu/add-azure-external-provider
Add azure external provider
2022-05-12 22:19:10 +03:00
Ionut Balutoiu
366ccf76c5 Add Azure external provider example 2022-05-12 22:13:33 +03:00