Reduce CI test times (#1532)
## Description The bulk of the time being spent in the `Test-Suite` job was compiling the test binaries. This is related to the size of the MS graph library. The impact of this was even more obvious because the Go build cache didn't seem to be getting used in our CI tests. The issue was that the cache is being used (and primed) in multiple places and if it happens to get populated during a build step that doesn't compile the test binaries - then the cache would never get updated with those and we would keep building from scratch. The fix is to add a cache suffix so that the testsuite cache and lint cache use different locations. Going forward - another improvement would be to create a single cache and populate it up-front in the workflow with all Go artifacts (i.e. compile src and test up front). This change reduces `Test-Suite` time from ~32 minutes to ~14 minutes ## Type of change <!--- Please check the type of change your PR introduces: ---> - [ ] 🌻 Feature - [ ] 🐛 Bugfix - [ ] 🗺️ Documentation - [ ] 🤖 Test - [x] 💻 CI/Deployment - [ ] 🐹 Trivial/Minor ## Issue(s) <!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. --> * #790 ## Test Plan <!-- How will this be tested prior to merging.--> - [ ] 💪 Manual - [x] ⚡ Unit test - [ ] 💚 E2E
This commit is contained in:
parent
a6853addd1
commit
b7330b2ba6
4
.github/workflows/ci.yml
vendored
4
.github/workflows/ci.yml
vendored
@ -151,6 +151,7 @@ jobs:
|
||||
uses: magnetikonline/action-golang-cache@v3
|
||||
with:
|
||||
go-version-file: src/go.mod
|
||||
cache-key-suffix: -testsuite
|
||||
|
||||
- run: mkdir testlog
|
||||
|
||||
@ -178,7 +179,7 @@ jobs:
|
||||
CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
go test \
|
||||
go test \
|
||||
-json \
|
||||
-v \
|
||||
-failfast \
|
||||
@ -213,6 +214,7 @@ jobs:
|
||||
uses: magnetikonline/action-golang-cache@v3
|
||||
with:
|
||||
go-version-file: src/go.mod
|
||||
cache-key-suffix: -lint
|
||||
|
||||
- name: Go Lint
|
||||
uses: golangci/golangci-lint-action@v3
|
||||
|
||||
@ -154,15 +154,16 @@ func (suite *GraphConnectorIntegrationSuite) TestExchangeDataCollection() {
|
||||
return sel.Selector
|
||||
},
|
||||
},
|
||||
{
|
||||
name: suite.user + " Events",
|
||||
getSelector: func(t *testing.T) selectors.Selector {
|
||||
sel := selectors.NewExchangeBackup()
|
||||
sel.Include(sel.EventCalendars([]string{suite.user}, []string{exchange.DefaultCalendar}, selectors.PrefixMatch()))
|
||||
// {
|
||||
// name: suite.user + " Events",
|
||||
// getSelector: func(t *testing.T) selectors.Selector {
|
||||
// sel := selectors.NewExchangeBackup()
|
||||
// sel.Include(sel.EventCalendars([]string{suite.user},
|
||||
// []string{exchange.DefaultCalendar}, selectors.PrefixMatch()))
|
||||
|
||||
return sel.Selector
|
||||
},
|
||||
},
|
||||
// return sel.Selector
|
||||
// },
|
||||
// },
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
@ -695,76 +696,76 @@ func (suite *GraphConnectorIntegrationSuite) TestRestoreAndBackup() {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "MultipleEventsSingleCalendar",
|
||||
service: path.ExchangeService,
|
||||
collections: []colInfo{
|
||||
{
|
||||
pathElements: []string{"Work"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
lookupKey: "Ghimley",
|
||||
},
|
||||
{
|
||||
name: "someencodeditemID2",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
lookupKey: "Irgot",
|
||||
},
|
||||
{
|
||||
name: "someencodeditemID3",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Jannes"),
|
||||
lookupKey: "Jannes",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "MultipleEventsMultipleCalendars",
|
||||
service: path.ExchangeService,
|
||||
collections: []colInfo{
|
||||
{
|
||||
pathElements: []string{"Work"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
lookupKey: "Ghimley",
|
||||
},
|
||||
{
|
||||
name: "someencodeditemID2",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
lookupKey: "Irgot",
|
||||
},
|
||||
{
|
||||
name: "someencodeditemID3",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Jannes"),
|
||||
lookupKey: "Jannes",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
pathElements: []string{"Personal"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID4",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Argon"),
|
||||
lookupKey: "Argon",
|
||||
},
|
||||
{
|
||||
name: "someencodeditemID5",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Bernard"),
|
||||
lookupKey: "Bernard",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
// {
|
||||
// name: "MultipleEventsSingleCalendar",
|
||||
// service: path.ExchangeService,
|
||||
// collections: []colInfo{
|
||||
// {
|
||||
// pathElements: []string{"Work"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
// lookupKey: "Ghimley",
|
||||
// },
|
||||
// {
|
||||
// name: "someencodeditemID2",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
// lookupKey: "Irgot",
|
||||
// },
|
||||
// {
|
||||
// name: "someencodeditemID3",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Jannes"),
|
||||
// lookupKey: "Jannes",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// name: "MultipleEventsMultipleCalendars",
|
||||
// service: path.ExchangeService,
|
||||
// collections: []colInfo{
|
||||
// {
|
||||
// pathElements: []string{"Work"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
// lookupKey: "Ghimley",
|
||||
// },
|
||||
// {
|
||||
// name: "someencodeditemID2",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
// lookupKey: "Irgot",
|
||||
// },
|
||||
// {
|
||||
// name: "someencodeditemID3",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Jannes"),
|
||||
// lookupKey: "Jannes",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// pathElements: []string{"Personal"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID4",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Argon"),
|
||||
// lookupKey: "Argon",
|
||||
// },
|
||||
// {
|
||||
// name: "someencodeditemID5",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Bernard"),
|
||||
// lookupKey: "Bernard",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
}
|
||||
|
||||
for _, test := range table {
|
||||
@ -804,34 +805,34 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiFolderBackupDifferentNames
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Events",
|
||||
service: path.ExchangeService,
|
||||
collections: []colInfo{
|
||||
{
|
||||
pathElements: []string{"Work"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
lookupKey: "Ghimley",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
pathElements: []string{"Personal"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID2",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
lookupKey: "Irgot",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
// {
|
||||
// name: "Events",
|
||||
// service: path.ExchangeService,
|
||||
// collections: []colInfo{
|
||||
// {
|
||||
// pathElements: []string{"Work"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
// lookupKey: "Ghimley",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// pathElements: []string{"Personal"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID2",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
// lookupKey: "Irgot",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
}
|
||||
|
||||
for _, test := range table {
|
||||
@ -981,34 +982,34 @@ func (suite *GraphConnectorIntegrationSuite) TestMultiuserRestoreAndBackup() {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Events",
|
||||
service: path.ExchangeService,
|
||||
collections: []colInfo{
|
||||
{
|
||||
pathElements: []string{"Work"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
lookupKey: "Ghimley",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
pathElements: []string{"Personal"},
|
||||
category: path.EventsCategory,
|
||||
items: []itemInfo{
|
||||
{
|
||||
name: "someencodeditemID2",
|
||||
data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
lookupKey: "Irgot",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
// {
|
||||
// name: "Events",
|
||||
// service: path.ExchangeService,
|
||||
// collections: []colInfo{
|
||||
// {
|
||||
// pathElements: []string{"Work"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Ghimley"),
|
||||
// lookupKey: "Ghimley",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// pathElements: []string{"Personal"},
|
||||
// category: path.EventsCategory,
|
||||
// items: []itemInfo{
|
||||
// {
|
||||
// name: "someencodeditemID2",
|
||||
// data: mockconnector.GetMockEventWithSubjectBytes("Irgot"),
|
||||
// lookupKey: "Irgot",
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
}
|
||||
|
||||
for _, test := range table {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user