Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions scripts/build/copy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package main

import (
"context"
"flag"
"fmt"
"strings"
)

func runCopy(_ context.Context, args []string, env Environment) error {
copyFlags := flag.NewFlagSet("copy", flag.ContinueOnError)
copyFlags.SetOutput(env.Err)

var planPath string
copyFlags.StringVar(&planPath, "plan", "", "path to the generation plan")
if err := copyFlags.Parse(args); err != nil {
return fmt.Errorf("parsing copy flags: %w", err)
}
if len(copyFlags.Args()) != 0 {
return fmt.Errorf("unexpected arguments: %s", strings.Join(copyFlags.Args(), " "))
}
if planPath == "" {
return fmt.Errorf("--plan is required")
}

plan, err := readPlan(env.FS, planPath)
if err != nil {
return fmt.Errorf("read generation plan: %w", err)
}

for _, service := range plan.Services {
if service.Action == ActionBlock {
fmt.Fprintln(env.Out, service.Service)
}
}
return nil
}
37 changes: 37 additions & 0 deletions scripts/build/copy_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package main

import (
"bytes"
"context"
"testing"
"testing/fstest"
)

func TestRunCopyPrintsServicesMarkedOnBlocklist(t *testing.T) {
filesystem := fstest.MapFS{
"generation-plan.json": {
Data: []byte(`{
"services": [
{"service": "remain", "oas_service": "remain_oas", "action": "block"},
{"service": "foo", "oas_service": "foo-bar", "action": "generate"},
{"service": "obsolete", "action": "delete"},
{"service": "bar", "oas_service": "bar_oas", "action": "block"},
{"service": "service2", "action": "delete"}
]
}`),
},
}
var stdout, stderr bytes.Buffer

err := runCopy(context.Background(), []string{"--plan", "generation-plan.json"}, Environment{
Out: &stdout,
Err: &stderr,
FS: readOnlyFileSystem{FileSystem: filesystem},
})
if err != nil {
t.Fatalf("runCopy failed: %v", err)
}
if got, want := stdout.String(), "remain\nbar\n"; got != want {
t.Errorf("stdout = %q, want %q", got, want)
}
}
2 changes: 2 additions & 0 deletions scripts/build/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
2 changes: 2 additions & 0 deletions scripts/build/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ func run(ctx context.Context, env Environment) bool {
err = runGenerate(ctx, args[1:], env)
case "delete":
err = runDelete(ctx, args[1:], env)
case "copy":
err = runCopy(ctx, args[1:], env)
default:
fmt.Fprintf(env.Err, "unknown command %q\n", args[0])
return false
Expand Down
26 changes: 26 additions & 0 deletions scripts/generate-sdk/languages/go.sh
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,24 @@ generate_go_sdk() {

warning=""

# Copy services from the blocklist to prevent missing dependencies in the examples or removal of the service
mkdir -p "${SERVICES_FOLDER}"
while IFS= read -r service; do
echo "Skipping blocklisted service ${service}"
warning+="Skipping blocklisted service ${service}\n"
# If the service exists in the repo, move them inside the service folder
if [ -d "${sdk_services_backup_dir}/${service}" ]; then
echo "Copy existing ${service} package"
cp -r "${sdk_services_backup_dir}/${service}" "${SERVICES_FOLDER}/${service}"

if [ -f "${SERVICES_FOLDER}/${service}/go.mod" ]; then
(cd "${SERVICES_FOLDER}/${service}" && go work use .)
fi
fi
done < <(
"${ROOT_DIR}/scripts/bin/build" copy --plan "generation-plan.json"
)

while IFS= read -r -d '' oas_service && IFS= read -r service; do
generate_go_service "${ROOT_DIR}/oas/services/${oas_service}" "${service}"
done < <(
Expand Down Expand Up @@ -164,6 +182,14 @@ generate_go_service() {
if grep -E "^${service}-${version}$" "${ROOT_DIR}/languages/golang/blocklist.txt"; then
echo "Skipping blocklisted API version ${version} of service ${service}"
warning+="Skipping blocklisted API version ${version} of service ${service}\n"

# If the service version exists in the repo, move them inside the service folder
if [ -d "${sdk_services_backup_dir}/${service}/${version}api" ]; then
echo "Copy existing ${service}/${version}api package"
mkdir -p "${SERVICES_FOLDER}/${service}"
cp -r "${sdk_services_backup_dir}/${service}/${version}api" "${SERVICES_FOLDER}/${service}/${version}api"
fi

continue
fi

Expand Down
38 changes: 38 additions & 0 deletions scripts/generate-sdk/languages/java.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,20 @@ generate_java_sdk() {

warning=""

# Copy services from the blocklist to prevent missing dependencies in the examples or removal of the service
mkdir -p "${SERVICES_FOLDER}"
while IFS= read -r service; do
echo "Skipping blocklisted service ${service}"
warning+="Skipping blocklisted service ${service}\n"
# If the service exists in the repo, move them inside the service folder
if [ -d "${sdk_services_backup_dir}/${service}" ]; then
echo "Copy existing ${service} package"
cp -r "${sdk_services_backup_dir}/${service}" "${SERVICES_FOLDER}/${service}"
fi
done < <(
"${ROOT_DIR}/scripts/bin/build" copy --plan "generation-plan.json"
)

while IFS= read -r -d '' oas_service && IFS= read -r service; do
generate_java_service \
"${ROOT_DIR}/oas/services/${oas_service}" \
Expand Down Expand Up @@ -139,6 +153,30 @@ generate_java_service(){
if grep -E "^${service}-${version}$" "${ROOT_DIR}/languages/java/blocklist.txt"; then
echo "Skipping blocklisted API version ${version} of service ${service}"
warning+="Skipping blocklisted API version ${version} of service ${service}\n"

# If the service version exists in the repo, move them inside the service folder
if [ -d "${sdk_services_backup_dir}/${service}/src/main/java/cloud/stackit/sdk/${service}/${version}api" ]; then
echo "Copy existing ${service}/src/main/java/cloud/stackit/sdk/${service}/${version}api package"
mkdir -p "${SERVICES_FOLDER}/${service}/src/main/java/cloud/stackit/sdk/${service}"
cp -r "${sdk_services_backup_dir}/${service}/src/main/java/cloud/stackit/sdk/${service}/${version}api" "${SERVICES_FOLDER}/${service}/src/main/java/cloud/stackit/sdk/${service}/${version}api"
fi

# Copy test files for the blocklisted service version
if [ -d "${sdk_services_backup_dir}/${service}/src/test/java/cloud/stackit/sdk/${service}/${version}api" ]; then
mkdir -p "${SERVICES_FOLDER}/${service}/src/test/java/cloud/stackit/sdk/${service}"
cp -r "${sdk_services_backup_dir}/${service}/src/test/java/cloud/stackit/sdk/${service}/${version}api" "${SERVICES_FOLDER}/${service}/src/test/java/cloud/stackit/sdk/${service}/${version}api"
fi
Comment on lines +157 to +168

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It looks like there is a small bug for the java path:
putting alb-v2 on the java blocklist and generating it copies the service but build.gradle and README.md are removed. I think this happens when every version of a API is blocked

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

nice catch! fixed it


# Copy the existing build.gradle file if exists and not already in the services folder
if [[ -f "${sdk_services_backup_dir}/${service}/build.gradle" && ! -f "${SERVICES_FOLDER}/${service}/build.gradle" ]]; then
cp "${sdk_services_backup_dir}/${service}/build.gradle" "${SERVICES_FOLDER}/${service}/build.gradle"
fi

# Copy the existing README.md file if exists and not already in the services folder
if [[ -f "${sdk_services_backup_dir}/${service}/README.md" && ! -f "${SERVICES_FOLDER}/${service}/README.md" ]]; then
cp "${sdk_services_backup_dir}/${service}/README.md" "${SERVICES_FOLDER}/${service}/README.md"
fi

continue
fi

Expand Down
20 changes: 20 additions & 0 deletions scripts/generate-sdk/languages/python.sh
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,22 @@ generate_python_sdk() {
extra_props_internal=""
fi

warning=""

# Copy services from the blocklist to prevent missing dependencies in the examples or removal of the service
mkdir -p "${SERVICES_FOLDER}"
while IFS= read -r service; do
echo "Skipping blocklisted service ${service}"
warning+="Skipping blocklisted service ${service}\n"
# If the service exists in the repo, move them inside the service folder
if [ -d "${sdk_services_backup_dir}/${service}" ]; then
echo "Copy existing ${service} package"
cp -r "${sdk_services_backup_dir}/${service}" "${SERVICES_FOLDER}/${service}"
fi
done < <(
"${ROOT_DIR}/scripts/bin/build" copy --plan "generation-plan.json"
)

# TODO: add to generator below when adding multi-API-version support:
# --inline-schema-options "SKIP_SCHEMA_REUSE=true"

Expand All @@ -106,6 +122,10 @@ generate_python_sdk() {
done < <(
"${ROOT_DIR}/scripts/bin/build" generate --plan "generation-plan.json"
)

if [[ -n "$warning" ]]; then
echo -e "\nSome of the services were skipped during creation!\n$warning"
fi
}

generate_python_service() {
Expand Down
Loading