diff --git a/.github/workflows/sdk-publish.yaml b/.github/workflows/sdk-publish.yaml index 15f5b97..adf650c 100644 --- a/.github/workflows/sdk-publish.yaml +++ b/.github/workflows/sdk-publish.yaml @@ -21,6 +21,10 @@ on: required: false type: string default: "5.x" + poetry_version: + description: "The version of poetry to use" + required: false + type: string target: description: "The specific target to publish" required: false @@ -154,11 +158,13 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.9" - name: Install poetry run: | curl -sSL https://install.python-poetry.org | python3 - poetry --version + env: + POETRY_VERSION: ${{ inputs.poetry_version }} - name: Check for publish.sh id: check-publish run: | diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 51a4e14..325a3fe 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -20,15 +20,21 @@ jobs: id-token: "write" actions: "read" steps: - - name: Set up Go 1.x - uses: actions/setup-go@v3 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: ^1.21 + go-version-file: "go.mod" - name: Configure git for private modules env: GIT_AUTH_TOKEN: ${{ secrets.BOT_REPO_TOKEN }} run: git config --global url."https://speakeasybot:${GIT_AUTH_TOKEN}@github.com".insteadOf "https://github.com" - - name: Check out code - uses: actions/checkout@v3 - name: Test run: go test -v ./... + docker-build: + name: Docker Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: docker/build-push-action@b32b51a8eda65d6793cd0494a773d4f6bcef32dc # v6.11.0 + with: + push: false diff --git a/.github/workflows/workflow-executor.yaml b/.github/workflows/workflow-executor.yaml index c7f65d1..1268f29 100644 --- a/.github/workflows/workflow-executor.yaml +++ b/.github/workflows/workflow-executor.yaml @@ -78,6 +78,10 @@ on: description: "Version of pnpm to install. Not recommended for use without consulting Speakeasy support." required: false type: string + poetry_version: + description: "Version of poetry to install. Not recommended for use without consulting Speakeasy support." + required: false + type: string secrets: github_access_token: description: A GitHub access token with write access to the repo @@ -208,6 +212,7 @@ jobs: set_version: ${{ inputs.set_version }} cli_environment_variables: ${{ inputs.environment }} pnpm_version: ${{ inputs.pnpm_version }} + poetry_version: ${{ inputs.poetry_version }} - uses: ravsamhq/notify-slack-action@v2 if: ${{ steps.check-label.outputs.short_circuit_label_trigger != 'true' && env.SLACK_WEBHOOK_URL != '' }} with: @@ -257,11 +262,13 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.8" + python-version: "3.9" - name: Install poetry run: | curl -sSL https://install.python-poetry.org | python3 - poetry --version + env: + POETRY_VERSION: ${{ inputs.poetry_version }} - name: Check for publish.sh id: check-publish run: | diff --git a/Dockerfile b/Dockerfile index 123e9a5..503a923 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,17 +18,15 @@ RUN go build -o /action FROM golang:1.23-alpine3.20 RUN apk update -RUN apk add git + +### Install common tools +RUN apk add --update --no-cache bash curl git ### Install Node / NPM RUN apk add --update --no-cache nodejs npm ### Install Python -RUN apk add --update --no-cache python3 py3-pip python3-dev - -### Install Poetry and validate -RUN apk add --update --no-cache poetry -RUN poetry --version +RUN apk add --update --no-cache python3 py3-pip python3-dev pipx ### Install Java RUN apk add --update --no-cache openjdk11 gradle @@ -40,12 +38,6 @@ RUN apk add --update --no-cache build-base ruby ruby-bundler ruby-dev ENV DOTNET_ROOT=/usr/lib/dotnet RUN apk add --update --no-cache dotnet6-sdk -### Install .NET5.0 -RUN apk add --update --no-cache curl bash -# openssl1.1-compat is gradually getting removed from package managers.. -RUN apk add --update --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing openssl1.1-compat -RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -Channel 5.0 -InstallDir ${DOTNET_ROOT} - ### Install .NET8.0 RUN curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -Channel 8.0 -InstallDir ${DOTNET_ROOT} RUN dotnet --list-sdks diff --git a/action.yml b/action.yml index 4f1538d..e1d2059 100644 --- a/action.yml +++ b/action.yml @@ -94,6 +94,9 @@ inputs: pnpm_version: description: "Version of pnpm to install. Not recommended for use without consulting Speakeasy support." required: false + poetry_version: + description: "Version of poetry to install. Not recommended for use without consulting Speakeasy support." + required: false outputs: publish_python: description: "Whether the Python SDK will be published to PyPi" @@ -199,3 +202,4 @@ runs: - ${{ inputs.set_version }} - ${{ inputs.cli_environment_variables }} - ${{ inputs.pnpm_version }} + - ${{ inputs.poetry_version }} diff --git a/internal/actions/setup_environment.go b/internal/actions/setup_environment.go index 04ef581..ee9cb5b 100644 --- a/internal/actions/setup_environment.go +++ b/internal/actions/setup_environment.go @@ -13,6 +13,10 @@ import ( // publishing, then an input (pnpm_version in this case) should be set to a // non-empty value and this logic will install the dependency. func SetupEnvironment() error { + if err := installPoetry(); err != nil { + return err + } + if pnpmVersion := environment.GetPnpmVersion(); pnpmVersion != "" { pnpmPackageSpec := "pnpm@" + pnpmVersion cmd := exec.Command("npm", "install", "-g", pnpmPackageSpec) @@ -24,3 +28,21 @@ func SetupEnvironment() error { return nil } + +// Installs poetry using pipx. If the INPUT_POETRY_VERSION environment variable +// is set, it will install that version. +func installPoetry() error { + poetrySpec := "poetry" + + if poetryVersion := environment.GetPoetryVersion(); poetryVersion != "" { + poetrySpec = "poetry==" + poetryVersion + } + + cmd := exec.Command("pipx", "install", "--global", poetrySpec) + + if err := cmd.Run(); err != nil { + return fmt.Errorf("error installing poetry: %w", err) + } + + return nil +} diff --git a/internal/environment/environment.go b/internal/environment/environment.go index 4f72b6e..f775f69 100644 --- a/internal/environment/environment.go +++ b/internal/environment/environment.go @@ -213,6 +213,10 @@ func GetOpenAPIDocAuthToken() string { return os.Getenv("INPUT_OPENAPI_DOC_AUTH_TOKEN") } +func GetPoetryVersion() string { + return os.Getenv("INPUT_POETRY_VERSION") +} + func GetPnpmVersion() string { return os.Getenv("INPUT_PNPM_VERSION") } diff --git a/testing/test.sh b/testing/test.sh index b3d8bc7..21c2ef1 100755 --- a/testing/test.sh +++ b/testing/test.sh @@ -9,7 +9,7 @@ function run_action() { } # Default environment variables not subject to change by different tests -#INPUT_SPEAKEASY_VERSION="v1.240.0" # Uncomment to test specific versions otherwise uses latest +#export INPUT_SPEAKEASY_VERSION="v1.240.0" # Uncomment to test specific versions otherwise uses latest if [ "$RUN_FINALIZE" = "true" ]; then BRANCH_NAME=$(go run testing/getoutput.go -output branch_name)