Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(github): dagger based integrations tests github workflow #1428

Merged
merged 17 commits into from
Mar 29, 2023

Conversation

GeorgeMac
Copy link
Contributor

@GeorgeMac GeorgeMac commented Mar 22, 2023

Install the Dagger based integration tests into CI.

For now they are slow as it always runs with an empty cache.
Flipt produces 3.2GB of mod cache and 1GB of build cache. All of which need repopulating.
I attemoted to manage this caching myself (bit of tarballing and copying to and from dagger layers).
It was functional but provided no gains.

So I removed the custom caching for now and we can wait for Dagger to implement it.
I expect it to far outperform the silly hack I employed.
Particularly as their caching mechanism works on cache volumes and layers.

For now, here is the uncached implementation. I removed the workflows for the old ITs.

@codecov
Copy link

codecov bot commented Mar 22, 2023

Codecov Report

Merging #1428 (115c2e1) into main (89fec0e) will decrease coverage by 0.19%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##             main    #1428      +/-   ##
==========================================
- Coverage   78.17%   77.98%   -0.19%     
==========================================
  Files          43       43              
  Lines        3239     3239              
==========================================
- Hits         2532     2526       -6     
- Misses        565      569       +4     
- Partials      142      144       +2     

see 1 file with indirect coverage changes

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@GeorgeMac
Copy link
Contributor Author

So without Dagger supporting caching were looking at between 8 - 10 minutes to run integration tests.
I followed along and most of that is fetching build time dependencies (unsurprising) and then having to build everything in Go from scratch. Both of these things are what will be cached when the dagger cache is exported.

So TL;DR bring on Dagger caching. I expect this will be super fast.
Locally with a warm cache, an IT change only requires 17s to build and run through the entire suite.

@GeorgeMac GeorgeMac marked this pull request as ready for review March 28, 2023 17:14
@GeorgeMac GeorgeMac requested a review from a team as a code owner March 28, 2023 17:14
@GeorgeMac
Copy link
Contributor Author

Screenshot 2023-03-28 at 18 15 13

Codecov is drunk, it thinks I touched the oplock code. It even seems to think I implemented a bunch of it.
And dropped its coverage from 95 to 90% which is causing it to fail here.

Copy link
Collaborator

@markphelps markphelps left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

works great locally for me! should we consider moving the IT portions out of hack and back into build or test folders? if its not possible/not worth it right now I totally understand as well

@GeorgeMac GeorgeMac requested a review from yquansah March 29, 2023 13:37
@GeorgeMac GeorgeMac merged commit 46242eb into main Mar 29, 2023
@GeorgeMac GeorgeMac deleted the gm/install-its branch March 29, 2023 13:56
GeorgeMac added a commit that referenced this pull request Mar 30, 2023
* chore(deps): bump go.opentelemetry.io/otel/exporters/zipkin (#1440)

Bumps [go.opentelemetry.io/otel/exporters/zipkin](https://github.com/open-telemetry/opentelemetry-go) from 1.13.0 to 1.14.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.13.0...v1.14.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/exporters/zipkin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(github): dagger based integrations tests github workflow (#1428)

* feat(github): install dagger based ITs as action workflow

* fix(github): add workdir to mage action

* chore(hack/build): bump dagger to 0.5.1

* chore: enable daggers experimental gha cache

* chore(hack/build): reword test log lines

* fix(github): move env var from legacy to experimental tests

* chore(hack/build): arbitrary change to trigger rebuild

* chore(github): remove experimental dagger cache env var

* feat(hack/build): direct integration test flipt logs into directory

* chore: empty commit to trigger CI

* chore(hack/build): log error when failing to copy flipt logs

* chore(hack/build): adding log line to integration test start

* fix(github): stop caching entire hack build directory

* refactor(hack/build): organize integration cases into test case struct

* refactor(github): remove legacy API workflows and replace with dagger mage task

* chore(hack/build): use protocolPorts map for test case iteration

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
markphelps added a commit that referenced this pull request Apr 5, 2023
* feat: (sqlite) support namespace at storage level, mostly for flags (#1368)

* feat: (sqlite) wip support namespace at storage level, mostly for flags

* chore: rename down namespace file correctly

* chore: fix server/flag_test.go

* chore: redo migration to use temp_tables for composite keys

* chore: just use TODO for now for down migration

* chore: comments

* chore: wip namespace protos

* chore: better err messages

* Update internal/storage/sql/common/flag.go

Co-authored-by: George <[email protected]>

* chore: fix tests

* chore: split into seperate migrations

* chore: more error messages

* chore: rm println statment

---------

Co-authored-by: George <[email protected]>

* feat: Namespaces segments storage (#1369)

* feat: (sqlite) add namespace support for rules storage (#1371)

* feat: (sqlite) eval storage namespace support (#1372)

* Namespaces storage (#1383)

* feat: wip namespace storage

* chore: add tests; storage impl

* chore: appease the linter

* chore: less sleepy

* Namespaces mysql (#1386)

* feat: wip namespace storage

* chore: add tests; storage impl

* chore: appease the linter

* feat: (wip) add namespace mysql migrations

* chore: rename migrations

* chore: rm empty migrations for the moment

* chore: less sleepy

* chore: 6 bytes for timestamp

* chore: add rules migration

* chore: add migration comments, revert local config

* chore: reset mysql example

* Namespaces postgres (#1388)

* feat: (wip) postgres ddl

* chore: fix tests

* chore: disable container logging unless verbose env var passed

* Namespaces cockroach (#1390)

* feat: cockroachdb migrations

* chore: fix migrations for cockroach

* chore: namespaces down migrations (#1396)

* Namespaces: flags storage tests (#1406)

* Namespaces: segments storage tests (#1408)

* chore: add segment namespace storage tests

* chore: regen protos

* chore: ignore sdk dir when fmting

* chore: add remaining storage layer tests (#1412)

* feat: add namespaces server mappings (#1415)

* chore: add remaining storage layer tests

* feat: add namespaces server mappings

* chore: add back default namespace to otel metrics

* chore: fix middleware test

* Namespaces rpc (#1421)

* feat: check for protected or flags existing when deleting a namespace (#1422)

* feat: add namespaces server impl

* chore: spacing

* chore: rm ability to set protected

* feat: check for protected or flags existing when deleting a namespace

* chore: fix test

* chore: add test for non-existing delete

* feat(hack/build): add cases for namespace scoped integration tests (#1436)

* chore: regenerate protobuf

* feat(rpc/flipt): configure gateway routes for namespaces

* feat(hack/build): add cases for namespace scoped integration tests

* chore(rpc/flipt): remove TODO

* chore(hack/build): use random string for namespace key

* test(hack/build): ensure default namespace cannot be deleted

* test(hack/build): ensure default namespace is protected but updateable

* test(hack/build): ensure namespace with flags cannot be deleted

* feat: add check for rule namespaced errors

* fix: namespace segment REST API routes were not correct (#1445)

* feat: add distribution test for cross-namespace entities

* feat: leave namespace check to distribution

* feat: generate namespaced scoped routes for distributions

* chore: address changes in regards to error messaging

* chore: abstract out the two types of DistributionRequests

* fix(migrations/sqlite): reorder to ensure we copy all data before drop (#1446)

* fix(migrations/sqlite): reorder to ensure we copy all data before drop

* fix(migrations/sqlite): copy distributions into temp table before dropping everything

* chore: do joins on the query and make error messages match

* chore: merge main into namespaces (#1448)

* chore(deps): bump go.opentelemetry.io/otel/exporters/zipkin (#1440)

Bumps [go.opentelemetry.io/otel/exporters/zipkin](https://github.com/open-telemetry/opentelemetry-go) from 1.13.0 to 1.14.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.13.0...v1.14.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/exporters/zipkin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(github): dagger based integrations tests github workflow (#1428)

* feat(github): install dagger based ITs as action workflow

* fix(github): add workdir to mage action

* chore(hack/build): bump dagger to 0.5.1

* chore: enable daggers experimental gha cache

* chore(hack/build): reword test log lines

* fix(github): move env var from legacy to experimental tests

* chore(hack/build): arbitrary change to trigger rebuild

* chore(github): remove experimental dagger cache env var

* feat(hack/build): direct integration test flipt logs into directory

* chore: empty commit to trigger CI

* chore(hack/build): log error when failing to copy flipt logs

* chore(hack/build): adding log line to integration test start

* fix(github): stop caching entire hack build directory

* refactor(hack/build): organize integration cases into test case struct

* refactor(github): remove legacy API workflows and replace with dagger mage task

* chore(hack/build): use protocolPorts map for test case iteration

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore: add missing namespace metrics (#1450)

* chore: allow testing of namespaces ui branch for build

* chore: rm down migrations (#1449)

* chore: wip rm down migrations

* chore: fix tests

* chore: fix tests; cleanup

* chore: use new migrator on import if drop specified

* chore: fix drop before import for sqlite

* chore: move mysql fk disable into migrator down method

* chore: codecov's last chance

* feat(cmd): import and export namespace flag (#1452)

* refactor(export): promote namespace to NewExporter argument

* refactor(export): use GRPC service interface as exporter dependency

* feat(export): support --export-from-address remote flipt address flag

* refactor(cmd): share config as argument not global state

* refactor(cmd/export): move command boostrapping from main.go to export.go

* refactor(cmd): move signal trapping into main

* refactor(cmd/import): move command boostrapping from main.go to import.go

* refactor(ext): expose namespace as argument to NewImporter

* feat(cmd/import): support remote import via --import-to-address

* refactor(hack/build): restructure testing packages

* refactor(hack/build): create import and export integration tests

* feat(hack/build): more import integration test cases

* feat(cmd/export): support --namespace flag

* chore: go mod tidy

* fix(cmd): do not close db early in import/export

* refactor(cmd): rename import/export flags to --address and --token

* refactor(cmd/import): move server config into server.go

* fix(cmd/import): pass namespace key as name on create

* fix(hack/build): assert returned namespace name is as expected

* chore: validation logic for namespace requests (#1457)

* chore: validation logic for namespace requests

* chore: fix import command to use the namespace key as the name as well

* chore: rm TODO comments in exporter

* chore: mage proto

* chore: update changelog for future namespace release; add mage proto lint check (#1460)

* chore: trigger lint build

* chore: rm mage proto check for now as its not working

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: George <[email protected]>
Co-authored-by: Yoofi Quansah <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants