Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sdk include/exclude logic #21

Merged
merged 8 commits into from
Dec 28, 2023
Merged
Show file tree
Hide file tree
Changes from 3 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
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,27 +43,29 @@ steps:
uses: pulumi/[email protected]
```

Optionally, you may specify language SDKs individually:
Optionally, you may specify language SDKs individually or in a comma separated list:

```yaml
steps:
- name: Publish nodejs SDK
uses: pulumi/pulumi-package-publisher@0058a106b68d8277f17bbea0cd29b2ff6e671adc
with:
sdk: nodejs
- name: Publish Java SDK
- name: Publish Java and Python SDKs
uses: pulumi/pulumi-package-publisher@0058a106b68d8277f17bbea0cd29b2ff6e671adc
Copy link
Contributor

Choose a reason for hiding this comment

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

non-blocking: probably will want to remove the explicit version tagging here and elsewhere, or use @main

with:
sdk: java
- name: Publish Python SDK
sdk: java,python
- name: Publish every SDK except .NET
uses: pulumi/pulumi-package-publisher@0058a106b68d8277f17bbea0cd29b2ff6e671adc
with:
sdk: python
sdk: all,!dotnet
```

Valid inputs to `with.sdk` are:

- `all` - Equivalent to specifying all supported registries: `python,java,nodejs,dotnet`
- `python` - Publish to PyPI
- `java` - Publish to Maven
- `nodejs` - Publish to npm
- `dotnet` - Publish to nuget
- `!${LANG}` - To disable any of the above languages.
159 changes: 39 additions & 120 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,36 @@ name: 'Pulumi Package publisher'
description: 'A GitHub Action that publishes provider SDKs'
inputs:
sdk:
description: The name of the language SDK being published
description: |
The name of the language SDK being published.

To enable a single language, specify that language:

sdk: nodejs

To enable multiple languages, specify them:

sdk: nodejs,python

To enable all languages (the default), specify 'all':

sdk: all

To disable only a single language (but enable all others), use:

sdk: all,!nodejs

required: false
default: 'all'

# The if: statement for the above is:
#
# if: (contains(inputs.sdk, '${LANGUAGE}') || (contains(inputs.sdk, 'all') && !contains(inputs.sdk, '!all'))) && !contains(inputs.sdk, '!${LANGUAGE}')
#
# If can be read as:
#
# If (${LANGUAGE} or all (but not !all)) and not !${LANGUAGE}

runs:
using: "composite"
steps:
Expand All @@ -29,122 +55,15 @@ runs:
repo: pulumi/pulumictl
- name: Install Pulumi CLI
uses: pulumi/action-install-pulumi-cli@v2
- name: Setup Node
if: inputs.sdk == 'nodejs' || inputs.sdk == 'all'
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Download nodejs SDK
if: inputs.sdk == 'nodejs' || inputs.sdk == 'all'
uses: actions/download-artifact@v2
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress nodejs SDK
if: inputs.sdk == 'nodejs' || inputs.sdk == 'all'
run: tar -zxf ${{ github.workspace }}/sdk/nodejs.tar.gz -C
${{ github.workspace }}/sdk/nodejs
shell: bash
- name: Run npm whoami
if: inputs.sdk == 'nodejs' || inputs.sdk == 'all'
run: npm whoami
shell: bash
env:
NODE_AUTH_TOKEN: ${{ env.NODE_AUTH_TOKEN }}
- name: Publish Node
if: inputs.sdk == 'nodejs' || inputs.sdk == 'all'
run: pulumi package publish-sdk nodejs --path ${{ github.workspace }}/sdk/nodejs/bin
shell: bash
env:
NODE_AUTH_TOKEN: ${{ env.NODE_AUTH_TOKEN }}
- name: Setup DotNet
if: inputs.sdk == 'dotnet' || inputs.sdk == 'all'
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Download dotnet SDK
if: inputs.sdk == 'dotnet' || inputs.sdk == 'all'
uses: actions/download-artifact@v2
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress dotnet SDK
if: inputs.sdk == 'dotnet' || inputs.sdk == 'all'
run: tar -zxf ${{ github.workspace }}/sdk/dotnet.tar.gz -C
${{ github.workspace }}/sdk/dotnet
shell: bash
- name: Publish dotnet SDK
if: inputs.sdk == 'dotnet' || inputs.sdk == 'all'
run: find "${{ github.workspace }}/sdk/dotnet/bin/Debug/" -name 'Pulumi.*.nupkg'
-exec dotnet nuget push -k "${NUGET_PUBLISH_KEY}" -s https://api.nuget.org/v3/index.json {} \;
shell: bash
- name: Setup Python
if: inputs.sdk == 'python' || inputs.sdk == 'all'
uses: actions/setup-python@v2
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
if: inputs.sdk == 'python' || inputs.sdk == 'all'
uses: actions/download-artifact@v2
with:
name: python-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress python SDK
if: inputs.sdk == 'python' || inputs.sdk == 'all'
run: tar -zxf ${{ github.workspace }}/sdk/python.tar.gz -C
${{ github.workspace }}/sdk/python
shell: bash
- name: Install Twine
if: inputs.sdk == 'python' || inputs.sdk == 'all'
run: python -m pip install pip twine
shell: bash
- name: Publish Python SDK
if: inputs.sdk == 'python' || inputs.sdk == 'all'
run: if [ -n "${PYPI_USERNAME}" ] ;
then PYPI_PUBLISH_USERNAME=${PYPI_USERNAME};
else PYPI_PUBLISH_USERNAME="pulumi";
fi &&
echo "Publishing Pip package to pypi as ${PYPI_PUBLISH_USERNAME}:" &&
twine upload
-u "${PYPI_PUBLISH_USERNAME}" -p "${PYPI_PASSWORD}"
"${{ github.workspace }}/sdk/python/bin/dist/*"
--skip-existing
--verbose
shell: bash
- name: Setup Java
if: inputs.sdk == 'java' || inputs.sdk == 'all'
uses: actions/setup-java@v3
with:
cache: gradle
distribution: temurin
java-version: ${{ env.JAVAVERSION }}
- name: Setup Gradle
if: inputs.sdk == 'java' || inputs.sdk == 'all'
uses: gradle/gradle-build-action@v2
with:
gradle-version: "7.6"
- name: Download java SDK
if: inputs.sdk == 'java' || inputs.sdk == 'all'
uses: actions/download-artifact@v2
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress java SDK
if: inputs.sdk == 'java' || inputs.sdk == 'all'
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java
shell: bash
- name: Set PACKAGE_VERSION to Env
if: inputs.sdk == 'java' || inputs.sdk == 'all'
run: echo "PACKAGE_VERSION=$(pulumictl get version --language generic)" >>
$GITHUB_ENV
shell: bash
- name: Publish Java SDK
if: inputs.sdk == 'java' || inputs.sdk == 'all'
continue-on-error: true
uses: gradle/gradle-build-action@9b814496b50909128c6a52622b416c5ffa04db49
with:
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
build-root-directory: ./sdk/java
gradle-version: 7.4.1
- name: Nodejs - Publish to NPM
uses: ./lang/nodejs.yml
if: (contains(inputs.sdk, 'nodejs') || (contains(inputs.sdk, 'all') && !contains(inputs.sdk, '!all'))) && !contains(inputs.sdk, '!nodejs')
- name: .NET - Publish to Nuget
if: (contains(inputs.sdk, 'dotnet') || (contains(inputs.sdk, 'all') && !contains(inputs.sdk, '!all'))) && !contains(inputs.sdk, '!dotnet')
uses: ./lang/dotnet.yml
- name: Python - Publish to PyPi
if: (contains(inputs.sdk, 'python') || (contains(inputs.sdk, 'all') && !contains(inputs.sdk, '!all'))) && !contains(inputs.sdk, '!python')
uses: ./lang/python.yml
- name: Java - Publish to Maven
if: (contains(inputs.sdk, 'java') || (contains(inputs.sdk, 'all') && !contains(inputs.sdk, '!all'))) && !contains(inputs.sdk, '!java')
uses: ./lang/java.yml
23 changes: 23 additions & 0 deletions lang/dotnet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: 'Publish to Nuget'
description: 'A subcomponent of pulumi-package-publish'

runs:
using: "composite"
steps:
- name: Setup DotNet
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNETVERSION }}
- name: Download dotnet SDK
uses: actions/download-artifact@v2
with:
name: dotnet-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress dotnet SDK
run: tar -zxf ${{ github.workspace }}/sdk/dotnet.tar.gz -C
${{ github.workspace }}/sdk/dotnet
shell: bash
- name: Publish dotnet SDK
run: find "${{ github.workspace }}/sdk/dotnet/bin/Debug/" -name 'Pulumi.*.nupkg'
-exec dotnet nuget push -k "${NUGET_PUBLISH_KEY}" -s https://api.nuget.org/v3/index.json {} \;
shell: bash
36 changes: 36 additions & 0 deletions lang/java.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: 'Publish to Maven'
description: 'A subcomponent of pulumi-package-publish'

runs:
using: "composite"
steps:
- name: Setup Java
uses: actions/setup-java@v3
with:
cache: gradle
distribution: temurin
java-version: ${{ env.JAVAVERSION }}
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
with:
gradle-version: "7.6"
- name: Download java SDK
uses: actions/download-artifact@v2
with:
name: java-sdk.tar.gz
path: ${{ github.workspace}}/sdk/
- name: Uncompress java SDK
run: tar -zxf ${{github.workspace}}/sdk/java.tar.gz -C
${{github.workspace}}/sdk/java
shell: bash
- name: Set PACKAGE_VERSION to Env
run: echo "PACKAGE_VERSION=$(pulumictl get version --language generic)" >>
$GITHUB_ENV
shell: bash
- name: Publish Java SDK
continue-on-error: true
uses: gradle/gradle-build-action@9b814496b50909128c6a52622b416c5ffa04db49
with:
arguments: publishToSonatype closeAndReleaseSonatypeStagingRepository
build-root-directory: ./sdk/java
gradle-version: 7.4.1
30 changes: 30 additions & 0 deletions lang/nodejs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: 'Publish to NPM'
description: 'A subcomponent of pulumi-package-publish'

runs:
using: "composite"
steps:
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODEVERSION }}
registry-url: https://registry.npmjs.org
- name: Download nodejs SDK
uses: actions/download-artifact@v2
with:
name: nodejs-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress nodejs SDK
run: tar -zxf ${{ github.workspace }}/sdk/nodejs.tar.gz -C
${{ github.workspace }}/sdk/nodejs
shell: bash
- name: Run npm whoami
run: npm whoami
shell: bash
env:
NODE_AUTH_TOKEN: ${{ env.NODE_AUTH_TOKEN }}
- name: Publish Node
run: pulumi package publish-sdk nodejs --path ${{ github.workspace }}/sdk/nodejs/bin
shell: bash
env:
NODE_AUTH_TOKEN: ${{ env.NODE_AUTH_TOKEN }}
34 changes: 34 additions & 0 deletions lang/python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: 'Publish to PyPi'
description: 'A subcomponent of pulumi-package-publish'

runs:
using: "composite"
steps:
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: ${{ env.PYTHONVERSION }}
- name: Download python SDK
uses: actions/download-artifact@v2
with:
name: python-sdk.tar.gz
path: ${{ github.workspace }}/sdk/
- name: Uncompress python SDK
run: tar -zxf ${{ github.workspace }}/sdk/python.tar.gz -C
${{ github.workspace }}/sdk/python
shell: bash
- name: Install Twine
run: python -m pip install pip twine
shell: bash
- name: Publish Python SDK
run: if [ -n "${PYPI_USERNAME}" ] ;
then PYPI_PUBLISH_USERNAME=${PYPI_USERNAME};
else PYPI_PUBLISH_USERNAME="pulumi";
fi &&
echo "Publishing Pip package to pypi as ${PYPI_PUBLISH_USERNAME}:" &&
twine upload
-u "${PYPI_PUBLISH_USERNAME}" -p "${PYPI_PASSWORD}"
"${{ github.workspace }}/sdk/python/bin/dist/*"
--skip-existing
--verbose
shell: bash