From 85ae49248a417c2dbbd9a72c641f244f12e65165 Mon Sep 17 00:00:00 2001 From: Daylon Wilkins Date: Wed, 28 Aug 2024 05:20:01 -0700 Subject: [PATCH] Fix Integration Workflow --- .github/workflows/dependency-test.yml | 54 ++++++++++++++++++--------- sql/analyzer/analyzer.go | 4 +- sql/analyzer/node_batches.go | 6 +-- sql/analyzer/rules.go | 4 +- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/.github/workflows/dependency-test.yml b/.github/workflows/dependency-test.yml index 0ea783354c..71599eea05 100644 --- a/.github/workflows/dependency-test.yml +++ b/.github/workflows/dependency-test.yml @@ -4,7 +4,7 @@ on: pull_request: types: [opened, synchronize, reopened] issue_comment: - types: [created, edited] + types: [created, edited, deleted] jobs: test-integration: @@ -12,12 +12,33 @@ jobs: runs-on: ubuntu-latest steps: + - name: Checkout go-mysql-server + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Merge main into PR + id: merge_main + run: | + git fetch -all + git merge main --no-commit --no-ff + if [ $? -ne 0 ]; then + echo "Skipping the remainder of the workflow due to a merge conflict." + echo "skip=true" >> $GITHUB_OUTPUT + else + echo "Merge performed successfully, continuing workflow." + echo "skip=false" >> $GITHUB_OUTPUT + fi + - name: Check for a Dolt PR link id: check_dolt_pr + if: steps.merge_main.outputs.skip == 'false' run: | COMMENTS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments) + echo "$COMMENTS" COMMENT_EXISTS=$(echo "$COMMENTS" | jq -r '.[] | select(.body | contains("github.com/dolthub/dolt/pull/"))') + echo "$COMMENT_EXISTS" if [ -n "$COMMENT_EXISTS" ]; then echo "comment_exists=true" >> $GITHUB_OUTPUT else @@ -26,54 +47,53 @@ jobs: - name: Check for a DoltgreSQL PR link id: check_doltgresql_pr + if: steps.merge_main.outputs.skip == 'false' run: | COMMENTS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments) + echo "$COMMENTS" COMMENT_EXISTS=$(echo "$COMMENTS" | jq -r '.[] | select(.body | contains("github.com/dolthub/doltgresql/pull/"))') + echo "$COMMENT_EXISTS" if [ -n "$COMMENT_EXISTS" ]; then echo "comment_exists=true" >> $GITHUB_OUTPUT else echo "comment_exists=false" >> $GITHUB_OUTPUT fi - - name: Checkout go-mysql-server - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - - name: Install Go uses: actions/setup-go@v5 + if: steps.merge_main.outputs.skip == 'false' with: go-version-file: go.mod - name: Clone Dolt - if: steps.check_dolt_pr.outputs.comment_exists == 'false' + if: steps.merge_main.outputs.skip == 'false' && steps.check_dolt_pr.outputs.comment_exists == 'false' run: git clone https://github.com/dolthub/dolt.git - name: Clone DoltgreSQL repository - if: steps.check_doltgresql_pr.outputs.comment_exists == 'false' + if: steps.merge_main.outputs.skip == 'false' && steps.check_doltgresql_pr.outputs.comment_exists == 'false' run: git clone https://github.com/dolthub/doltgresql.git - name: Build DoltgreSQL's parser - if: steps.check_doltgresql_pr.outputs.comment_exists == 'false' + if: steps.merge_main.outputs.skip == 'false' && steps.check_doltgresql_pr.outputs.comment_exists == 'false' run: | cd doltgresql ./postgres/parser/build.sh - name: Test Dolt against main id: test_dolt_main - if: steps.check_dolt_pr.outputs.comment_exists == 'false' + if: steps.merge_main.outputs.skip == 'false' && steps.check_dolt_pr.outputs.comment_exists == 'false' continue-on-error: true run: | cd dolt/go go get github.com/dolthub/go-mysql-server@main go mod tidy cd libraries/doltcore/sqle/enginetest - go test ./... --count=1 + go test ./... --count=1 -skip TestDoltServerRunningUnixSocket - name: Test DoltgreSQL against main id: test_doltgresql_main - if: steps.check_doltgresql_pr.outputs.comment_exists == 'false' + if: steps.merge_main.outputs.skip == 'false' && steps.check_doltgresql_pr.outputs.comment_exists == 'false' continue-on-error: true run: | cd doltgresql @@ -83,21 +103,21 @@ jobs: go test ./... --count=1 -skip Replication - name: Test Dolt against PR - if: steps.check_dolt_pr.outputs.comment_exists == 'false' && steps.test_dolt_main.outcome == 'success' + if: steps.merge_main.outputs.skip == 'false' && steps.check_dolt_pr.outputs.comment_exists == 'false' && steps.test_dolt_main.outcome == 'success' run: | cd dolt/go git reset --hard - go get github.com/${{ github.event.pull_request.head.repo.full_name }}@${{ github.event.pull_request.head.sha }} + go mod edit -replace github.com/dolthub/go-mysql-server=../.. go mod tidy cd libraries/doltcore/sqle/enginetest - go test ./... --count=1 + go test ./... --count=1 -skip TestDoltServerRunningUnixSocket - name: Test DoltgreSQL against PR - if: steps.check_doltgresql_pr.outputs.comment_exists == 'false' && steps.test_doltgresql_main.outcome == 'success' + if: steps.merge_main.outputs.skip == 'false' && steps.check_doltgresql_pr.outputs.comment_exists == 'false' && steps.test_doltgresql_main.outcome == 'success' run: | cd doltgresql git reset --hard - go get github.com/${{ github.event.pull_request.head.repo.full_name }}@${{ github.event.pull_request.head.sha }} + go mod edit -replace github.com/dolthub/go-mysql-server=.. go mod tidy cd testing/go go test ./... --count=1 -skip Replication diff --git a/sql/analyzer/analyzer.go b/sql/analyzer/analyzer.go index 8a2834ecbb..a6ba0ed02d 100644 --- a/sql/analyzer/analyzer.go +++ b/sql/analyzer/analyzer.go @@ -80,9 +80,9 @@ type Builder struct { // NewBuilder creates a new Builder from a specific catalog. // This builder allow us add custom Rules and modify some internal properties. func NewBuilder(pro sql.DatabaseProvider) *Builder { - allBeforeDefault := make([]Rule, len(OnceBeforeDefault)+len(AlwaysBeforeDefault)) + allBeforeDefault := make([]Rule, len(OnceBeforeDefault)+len(AlwaysBeforeDefault2)) copy(allBeforeDefault, OnceBeforeDefault) - copy(allBeforeDefault[len(OnceBeforeDefault):], AlwaysBeforeDefault) + copy(allBeforeDefault[len(OnceBeforeDefault):], AlwaysBeforeDefault2) return &Builder{ provider: pro, onceBeforeRules: allBeforeDefault, diff --git a/sql/analyzer/node_batches.go b/sql/analyzer/node_batches.go index 50fd8f2505..b05d75a22b 100644 --- a/sql/analyzer/node_batches.go +++ b/sql/analyzer/node_batches.go @@ -19,7 +19,7 @@ func getBatchesForNode(n sql.Node, orig []*Batch) ([]*Batch, bool) { { Desc: "alwaysBeforeDefault", Iterations: 1, - Rules: AlwaysBeforeDefault, + Rules: AlwaysBeforeDefault2, }, { Desc: "simpleInsert", @@ -56,7 +56,7 @@ func getBatchesForNode(n sql.Node, orig []*Batch) ([]*Batch, bool) { { Desc: "alwaysBeforeDefault", Iterations: 1, - Rules: AlwaysBeforeDefault, + Rules: AlwaysBeforeDefault2, }, { Desc: "simpleUpdate", @@ -101,7 +101,7 @@ func getBatchesForNode(n sql.Node, orig []*Batch) ([]*Batch, bool) { { Desc: "alwaysBeforeDefault", Iterations: 1, - Rules: AlwaysBeforeDefault, + Rules: AlwaysBeforeDefault2, }, { Desc: "simpleDelete", diff --git a/sql/analyzer/rules.go b/sql/analyzer/rules.go index 8e73c6e3a9..fc3b2bbee6 100644 --- a/sql/analyzer/rules.go +++ b/sql/analyzer/rules.go @@ -63,11 +63,11 @@ var OnceBeforeDefault = []Rule{ {hoistOutOfScopeFiltersId, hoistOutOfScopeFilters}, } -// AlwaysBeforeDefault contains the rules to be applied just once before the +// AlwaysBeforeDefault2 contains the rules to be applied just once before the // DefaultRules. These are an extension of the OnceBeforeDefault rules that // will always apply to nodes, unlike the OnceBeforeDefault rules that may // be excluded depending on the node. This is only used by integrators. -var AlwaysBeforeDefault []Rule +var AlwaysBeforeDefault2 []Rule // DefaultRules to apply when analyzing nodes. var DefaultRules = []Rule{