chore: integrate intellij plugin in package workflow #1053
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: build test package and publish | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*" | |
paths-ignore: | |
- ".devcontainer/**" | |
- ".github/**" | |
- "!.github/workflows/**" | |
- "docs/**" | |
pull_request: | |
branches: | |
- main | |
workflow_dispatch: | |
env: | |
PYTHONUNBUFFERED: "1" | |
PIP_DISABLE_PIP_VERSION_CHECK: "1" | |
jobs: | |
test: | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest, ubuntu-latest, windows-latest] | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] | |
robot-version: ["rf41", "rf50", "rf60", "rf61", "rf70", "rf71"] | |
exclude: | |
- os: macos-latest | |
python-version: "3.8" | |
- os: macos-latest | |
python-version: "3.9" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup python ${{ matrix.python-version }} environment | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Ensure latest hatch is installed | |
run: pipx install hatch | |
- name: Test Python Packages | |
uses: nick-fields/retry@v3 | |
with: | |
max_attempts: 3 | |
timeout_minutes: 30 | |
command: hatch run test.${{ matrix.robot-version }}:test "--junitxml=test-results/os-${{ matrix.os }}-py-${{ matrix.python-version }}-${{ matrix.robot-version }}/test-results.xml" | |
- name: Upload Test Results | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-results-os-${{ matrix.os }}-py-${{ matrix.python-version }}-${{ matrix.robot-version }} | |
path: test-results | |
publish-test-results: | |
needs: test | |
runs-on: ubuntu-latest | |
permissions: | |
checks: write | |
# only needed unless run with comment_mode: off | |
pull-requests: write | |
if: always() | |
steps: | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Publish Unit Test Results | |
uses: EnricoMi/publish-unit-test-result-action@v2 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
junit_files: ./**/test-results.xml | |
code-quality: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Node.js environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "npm" | |
cache-dependency-path: package-lock.json | |
- name: install node modules | |
run: npm install --also=dev | |
- name: setup python environment | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.8" | |
- name: Ensure latest hatch is installed | |
run: pipx install hatch | |
- run: hatch run lint:style | |
if: always() | |
- run: hatch run lint:typing | |
if: always() | |
package: | |
needs: [code-quality, test] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- run: git describe --tag | |
- run: git describe --tag --long --first-parent --match "v[0-9]*" | |
- name: setup python environment | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.8" | |
- name: Ensure latest hatch is installed | |
run: pipx install hatch | |
- name: Setup Node.js environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "npm" | |
cache-dependency-path: package-lock.json | |
# Validate wrapper | |
- name: Gradle Wrapper Validation | |
uses: gradle/actions/wrapper-validation@v4 | |
# Set up Java environment for the next steps | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: zulu | |
java-version: 21 | |
# Setup Gradle | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
with: | |
gradle-home-cache-cleanup: true | |
# Set environment variables | |
- name: Export Properties | |
id: properties | |
shell: bash | |
run: | | |
echo "pluginVerifierHomeDir=~/.pluginVerifier" >> $GITHUB_OUTPUT | |
- name: install node modules | |
run: npm install --also=dev | |
- name: update versions from git | |
if: ${{ !startsWith( github.ref, 'refs/tags/v') }} | |
run: hatch run build:update-git-versions | |
- name: update doc links | |
if: ${{ startsWith( github.ref, 'refs/tags/v') }} | |
run: hatch run build:update-doc-links | |
- name: Update Changelog | |
run: hatch run build:git-cliff -o CHANGELOG.md | |
- name: package | |
run: hatch run build:package | |
- name: Upload VSCode package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: vscode-package | |
path: dist/robotcode*.vsix | |
- name: Upload python package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: python-package | |
path: dist/*.tar.gz | |
- name: Upload python wheel package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel-package | |
path: dist/*.whl | |
- name: Prepare IntelliJ Plugin Artifact | |
id: artifact | |
shell: bash | |
run: | | |
cd ${{ github.workspace }}/intellij-client/build/distributions | |
FILENAME=`ls *.zip` | |
unzip "$FILENAME" -d content | |
echo "filename=${FILENAME:0:-4}" >> $GITHUB_OUTPUT | |
# Store already-built plugin as an artifact for downloading | |
- name: Upload IntelliJ plugin | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ steps.artifact.outputs.filename }} | |
path: ./intellij-client/build/distributions/content/*/* | |
publish: | |
runs-on: ubuntu-latest | |
needs: package | |
if: success() && startsWith( github.ref, 'refs/tags/v') | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- run: git describe --tag | |
- name: setup python environment | |
id: setup-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.8" | |
- name: Ensure latest hatch is installed | |
run: pipx install hatch | |
- name: Setup Node.js environment | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "npm" | |
cache-dependency-path: package-lock.json | |
- name: install node modules | |
run: npm install --also=dev | |
- uses: actions/download-artifact@v4 | |
with: | |
name: vscode-package | |
path: dist | |
- uses: actions/download-artifact@v4 | |
with: | |
name: python-package | |
path: dist | |
- uses: actions/download-artifact@v4 | |
with: | |
name: wheel-package | |
path: dist | |
- name: get release informations | |
id: get_release_informations | |
run: | | |
hatch -q run build:extract-release-notes > ./auto_relnotes.md | |
echo "is_prelease=$(hatch -q run build:is-prerelease)" >> $GITHUB_OUTPUT | |
- name: create github release | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "dist/*" | |
prerelease: ${{ steps.get_release_informations.outputs.is_prelease }} | |
bodyFile: ./auto_relnotes.md | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: publish vsix and python packages | |
run: hatch -q run build:publish | |
env: | |
VSCE_PAT: ${{ secrets.VSCE_PAT }} | |
OVSX_PAT: ${{ secrets.OVSX_PAT }} | |
PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} | |
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} |