Skip to content

Prepare for next development phase (#453) #312

Prepare for next development phase (#453)

Prepare for next development phase (#453) #312

name: Prepare release
on:
push:
branches:
- main
workflow_dispatch:
jobs:
tag:
name: Tag release
runs-on: ubuntu-latest
outputs:
is_release: ${{ steps.check-number-of-tags.outputs.is_release }}
steps:
- name: Check out project sources
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Set up Git user
run: |
git config --global user.name "pulumi-kotlin[bot]"
git config --global user.email "138587440+pulumi-kotlin[bot]@users.noreply.github.com"
- name: Tag new versions of Pulumi Kotlin (if available)
run: ./gradlew tagRecentRelease
- name: Check number of tags
id: check-number-of-tags
run: |
number_of_tags=$(git tag --points-at HEAD | wc -l | awk '{print $1}')
if [[ "$number_of_tags" == "0" ]]; then is_release=false; else is_release=true; fi
echo "is_release=$is_release" >> $GITHUB_OUTPUT
- name: Push tags
run: git push --tags
publish:
name: Publish pulumi-${{ matrix.provider }}-kotlin (${{ matrix.majorVersion }}) to Maven Central Repository
needs: tag
runs-on: [ self-hosted, active ]
if: ${{ needs.tag.outputs.is_release == 'true' }}
strategy:
fail-fast: false
matrix:
include:
- provider: cloudflare
majorVersion: 4
- provider: cloudflare
majorVersion: 5
- provider: slack
majorVersion: 0
- provider: github
majorVersion: 5
- provider: random
majorVersion: 4
- provider: gcp
majorVersion: 6
- provider: google-native
majorVersion: 0
- provider: aws
majorVersion: 5
- provider: aws
majorVersion: 6
- provider: aws-native
majorVersion: 0
- provider: azure
majorVersion: 5
- provider: azure-native
majorVersion: 1
- provider: azure-native
majorVersion: 2
- provider: kubernetes
majorVersion: 3
- provider: kubernetes
majorVersion: 4
- provider: nomad
majorVersion: 0
- provider: docker
majorVersion: 3
- provider: docker
majorVersion: 4
- provider: gitlab
majorVersion: 4
- provider: gitlab
majorVersion: 5
- provider: gitlab
majorVersion: 6
- provider: digitalocean
majorVersion: 4
- provider: alicloud
majorVersion: 3
steps:
- id: provider
uses: ASzc/change-string-case-action@v5
with:
string: ${{ matrix.provider }}
- name: Check out project sources
uses: actions/checkout@v3
- name: Check if publication to Maven Central is necessary
id: check-for-release
shell: python
run: |
import os
import json
with open("src/main/resources/version-config.json") as version_config:
schemas = json.load(version_config)
versions = [
schema["kotlinVersion"] for schema in schemas
if schema["providerName"] == "${{ matrix.provider }}"
and schema["kotlinVersion"].split(".")[0] == "${{ matrix.majorVersion }}"
]
version = versions[0]
is_release = not version.endswith("-SNAPSHOT")
with open(os.environ['GITHUB_OUTPUT'], 'a') as fh:
fh.write('is_release=' + str(is_release).lower())
- name: Set up Java
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
uses: actions/setup-java@v3
with:
distribution: adopt
java-version: 11
- name: Publish packages
id: publish-to-maven-central
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
run: |
./gradlew publishPulumi${{ matrix.provider }}${{ matrix.majorVersion }}PublicationToMavenCentralRepository \
-Psigning.enabled=true \
-Psigning.key="${{ secrets.GPG_KEY }}" \
-Psigning.key.password="${{ secrets.GPG_KEY_PASSWORD }}" \
-Psonatype.username="${{ secrets.SONATYPE_USERNAME }}" \
-Psonatype.password="${{ secrets.SONATYPE_PASSWORD }}" \
-Dorg.gradle.daemon=false \
-q
- name: Rename Dokka directory before upload
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
run: |
file_name=$(ls ./build/libs/pulumi-${{ matrix.provider }}-kotlin-${{ matrix.majorVersion }}*-javadoc.jar | xargs -n 1 basename)
version=$(echo $file_name | sed -e "s/^pulumi-${{ matrix.provider }}-kotlin-//" -e "s/-javadoc.jar$//")
mkdir -p ./docs/${{ matrix.provider }}/$version
mv ./build/dokka/pulumi${{ steps.provider.outputs.capitalized }}${{ matrix.majorVersion }}Javadoc/* ./docs/${{ matrix.provider }}/$version
- name: Install Rclone
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
run: |
yum -y install unzip
curl https://rclone.org/install.sh | bash || true
- name: Configure Rclone
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
run: |
mkdir -p ~/.config/rclone
cp .github/workflows/rclone.conf ~/.config/rclone/rclone.conf
echo "$GCP_SERVICE_ACCOUNT_FILE" > ~/.config/gcp-key.json
env:
# pulumi-kotlin-docs service account key created manually through GCP UI and added manually to GitHub by @myhau (Michal Fudala)
GCP_SERVICE_ACCOUNT_FILE: ${{ secrets.GCP_SERVICE_ACCOUNT_FILE }}
- name: Upload Dokka artifacts
if: ${{ steps.check-for-release.outputs.is_release == 'true' }}
run: |
rclone copy --transfers=1024 ./docs/${{ matrix.provider }} rclone-jvm-lab:/pulumi-kotlin-docs/${{ matrix.provider }}
- name: Upload buildSrc test report
if: ${{ failure() && steps.publish-to-maven-central.outcome == 'failure' }}
uses: actions/upload-artifact@v3
with:
name: build-src-test-report
path: ./buildSrc/build/reports/tests/test/*
retention-days: 3
cleanup:
name: Clean up after release
needs: tag
runs-on: ubuntu-latest
if: ${{ needs.tag.outputs.is_release == 'true' }}
steps:
- name: Check out project sources
uses: actions/checkout@v3
- name: Set up Git user
run: |
git config --global user.name "pulumi-kotlin[bot]"
git config --global user.email "138587440+pulumi-kotlin[bot]@users.noreply.github.com"
- name: Prepare for next development phase
run: ./gradlew postRelease
- uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 # v1.8.0
id: generate-token
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.APP_PRIVATE_KEY }}
- name: Create pull request
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5.0.2
with:
title: Prepare for next development phase
body: |
## Task
Resolves: None
## Description
This PR was triggered automatically after a release. It replaces the released versions with SNAPSHOT versions.
base: main
branch: prepare-for-next-development-phase
token: ${{ steps.generate-token.outputs.token }}