diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f104c6a..8f256ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -145,13 +145,32 @@ jobs: with: terraform_version: ${{ matrix.terraform-version }} terraform_wrapper: false - - name: Create local plugin - run: | - ./scripts/local.sh ./examples/testcase 0.0.0-pre.0 - - name: Terraform - working-directory: examples/testcase + - name: Terraform (sqlite) + working-directory: integration-tests/sqlite run: | + ../../scripts/local.sh ../../dist 0.0.0-pre.0 terraform init terraform apply --auto-approve + - name: Terraform (no-dev-url) + working-directory: integration-tests/no-dev-url + run: | + ../../scripts/local.sh ../../dist 0.0.0-pre.0 + terraform init > /dev/null + terraform plan -no-color | grep --silent "Warning: dev_url is unset" + - name: Terraform (no-version) + working-directory: integration-tests/no-version + run: | + ../../scripts/local.sh ../../dist 0.0.0-pre.0 + terraform init > /dev/null + terraform plan -no-color | grep --silent "Warning: version is unset" + - name: Terraform (remote_dir) + working-directory: integration-tests/remote-dir + run: | + ../../scripts/local.sh ../../dist 0.0.0-pre.0 + terraform init > /dev/null + terraform plan -no-color > stdout.txt + cat stdout.txt | grep --silent "Plan: 1 to add, 0 to change, 0 to destroy." + ! cat stdout.txt | grep --silent "Warning: dev_url is unset" + ! cat stdout.txt | grep --silent "Warning: version is unset" env: - TF_LOG: DEBUG + TF_VAR_atlas_token: ${{ secrets.ATLAS_TOKEN }} diff --git a/examples/testcase/.gitignore b/examples/testcase/.gitignore deleted file mode 100644 index 6e69145..0000000 --- a/examples/testcase/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.terraform.lock.hcl -.terraform/* -terraform.d diff --git a/integration-tests/.gitignore b/integration-tests/.gitignore new file mode 100644 index 0000000..0fcbc58 --- /dev/null +++ b/integration-tests/.gitignore @@ -0,0 +1,5 @@ +**/.terraform.lock.hcl +**/.terraform/* +**/terraform.d +**/*.db +**/stdout.txt \ No newline at end of file diff --git a/integration-tests/no-dev-url/main.tf b/integration-tests/no-dev-url/main.tf new file mode 100644 index 0000000..b5d83f9 --- /dev/null +++ b/integration-tests/no-dev-url/main.tf @@ -0,0 +1,18 @@ +terraform { + required_providers { + atlas = { + source = "ariga/atlas" + version = "0.0.0-pre.0" + } + } +} + +data "atlas_schema" "db" { + src = "file://schema.sql" + dev_url = "sqlite://file?mode=memory" +} + +resource "atlas_schema" "db" { + hcl = data.atlas_schema.db.hcl + url = "sqlite://file.db" +} diff --git a/examples/testcase/schema.sql b/integration-tests/no-dev-url/schema.sql similarity index 100% rename from examples/testcase/schema.sql rename to integration-tests/no-dev-url/schema.sql diff --git a/integration-tests/no-version/main.tf b/integration-tests/no-version/main.tf new file mode 100644 index 0000000..6a66d3b --- /dev/null +++ b/integration-tests/no-version/main.tf @@ -0,0 +1,19 @@ +terraform { + required_providers { + atlas = { + source = "ariga/atlas" + version = "0.0.0-pre.0" + } + } +} + +data "atlas_migration" "db" { + dir = "./migrations" + url = "sqlite://file.db" +} + +resource "atlas_migration" "db" { + dir = "./migrations" + url = "sqlite://file.db" + dev_url = "sqlite://file?mode=memory" +} diff --git a/integration-tests/no-version/migrations/20231120145001.sql b/integration-tests/no-version/migrations/20231120145001.sql new file mode 100644 index 0000000..85f1951 --- /dev/null +++ b/integration-tests/no-version/migrations/20231120145001.sql @@ -0,0 +1,6 @@ +CREATE TABLE t1 ( + c1 INT, + c2 TEXT, + PRIMARY KEY (c1) +); + diff --git a/integration-tests/no-version/migrations/20231120145012.sql b/integration-tests/no-version/migrations/20231120145012.sql new file mode 100644 index 0000000..35addf5 --- /dev/null +++ b/integration-tests/no-version/migrations/20231120145012.sql @@ -0,0 +1,6 @@ +CREATE TABLE t2 ( + c1 INT, + c2 TEXT, + PRIMARY KEY (c1) +); + diff --git a/integration-tests/no-version/migrations/atlas.sum b/integration-tests/no-version/migrations/atlas.sum new file mode 100644 index 0000000..d433a06 --- /dev/null +++ b/integration-tests/no-version/migrations/atlas.sum @@ -0,0 +1,3 @@ +h1:dy0koXujpoUhVPowi2KP9Qoq0Sr6trcEmvrVWWXnN24= +20231120145001.sql h1:08Mdpo805VLOztN/C3vpi/pIyDjMCGFHfA/pmhtcgJI= +20231120145012.sql h1:h1DU3vLKHhhV6ilw6+DQ1plbVpRXQxZi4PYDgDmRDZs= diff --git a/integration-tests/remote-dir/main.tf b/integration-tests/remote-dir/main.tf new file mode 100644 index 0000000..74dadfd --- /dev/null +++ b/integration-tests/remote-dir/main.tf @@ -0,0 +1,33 @@ +terraform { + required_providers { + atlas = { + source = "ariga/atlas" + version = "0.0.0-pre.0" + } + } +} + +variable "atlas_token" { + type = string + sensitive = true +} + +provider "atlas" { + cloud { + token = var.atlas_token + } +} + +data "atlas_migration" "db" { + url = "sqlite://file.db" + remote_dir { + name = "tf-remote-dir" + } +} + +resource "atlas_migration" "db" { + url = "sqlite://file.db" + remote_dir { + name = "tf-remote-dir" + } +} diff --git a/examples/testcase/main.tf b/integration-tests/sqlite/main.tf similarity index 100% rename from examples/testcase/main.tf rename to integration-tests/sqlite/main.tf diff --git a/integration-tests/sqlite/schema.sql b/integration-tests/sqlite/schema.sql new file mode 100644 index 0000000..311a139 --- /dev/null +++ b/integration-tests/sqlite/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE t1 ( + c1 INT, + c2 TEXT, + PRIMARY KEY (c1) +); diff --git a/internal/provider/atlas_migration_resource.go b/internal/provider/atlas_migration_resource.go index b498261..2f0d504 100644 --- a/internal/provider/atlas_migration_resource.go +++ b/internal/provider/atlas_migration_resource.go @@ -211,9 +211,12 @@ func (r MigrationResource) ValidateConfig(ctx context.Context, req resource.Vali if resp.Diagnostics.HasError() { return } - resp.Diagnostics.Append(r.validateConfig(ctx, req.Config)...) - if resp.Diagnostics.HasError() { - return + if data.RemoteDir == nil { + // Local dir, validate config for dev-url + resp.Diagnostics.Append(r.validateConfig(ctx, req.Config)...) + if resp.Diagnostics.HasError() { + return + } } // Validate the remote_dir block switch { @@ -240,6 +243,7 @@ func (r MigrationResource) ValidateConfig(ctx context.Context, req resource.Vali ) return } + return case data.DirURL.IsNull(): resp.Diagnostics.AddError( "dir is unset", diff --git a/scripts/local.sh b/scripts/local.sh index 0245340..9a1cf9d 100755 --- a/scripts/local.sh +++ b/scripts/local.sh @@ -8,6 +8,6 @@ TARGET=$(go env GOOS)_$(go env GOARCH) PACKED="terraform-provider-${TYPE}_${VERSION}_${TARGET}.zip" PLUGIN_ADDR="${HOSTNAME}/${NAMESPACE}/${TYPE}" -PLUGIN_PATH="${1}/terraform.d/plugins/${PLUGIN_ADDR}" +PLUGIN_PATH="./terraform.d/plugins/${PLUGIN_ADDR}" mkdir -p $PLUGIN_PATH -cp ./dist/${PACKED} $PLUGIN_PATH +cp ${1}/${PACKED} $PLUGIN_PATH