Skip to content

Build

Build #2

Workflow file for this run

# GitHub Actions Workflow is created for testing and preparing the plugin release in the following steps:
# - validate Gradle Wrapper,
# - run 'verifyPlugin' tasks,
# - run 'buildPlugin' task and prepare artifact for the further tests,
# - run 'runPluginVerifier' task,
# - create a draft release.
#
# Workflow is triggered on push and pull_request events.
#
# GitHub Actions reference: https://help.github.com/en/actions
#
## JBIJPPTPL
name: Build
on:
workflow_dispatch:
# Trigger the workflow on pushes to only the 'main' branch (this avoids duplicate checks being run e.g. for dependabot pull requests)
push:
branches: [ develop ]
# Trigger the workflow on any pull request
pull_request:
branches: [ develop ]
types: ['opened', 'reopened', 'synchronize', 'ready_for_review']
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
# Branches from the https://github.com/microsoft/azure-maven-plugins and https://github.com/microsoft/azure-tools-for-java repositories
ENDGAME_VERSION: endgame-202408
jobs:
# Prepare environment and build the plugin
build-dependencies:
if: github.event.pull_request.draft == false
name: Build Dependencies
runs-on: ubuntu-latest
steps:
# Check out the current repository
- name: Fetch Sources
uses: actions/checkout@v4
with:
path: azure-tools-for-intellij
# Setup Java environment
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
- name: Cache Azure libraries
id: cache-azure-libraries
uses: actions/cache@v4
env:
cache-name: cache-azure-libraries
with:
path: /home/runner/.m2/repository/com/microsoft
key: ${{ env.ENDGAME_VERSION }}
# Build Utils library
- name: Build Utils
if: steps.cache-azure-libraries.outputs.cache-hit != 'true'
working-directory: ${{ github.workspace }}/azure-tools-for-intellij
shell: bash
run: ./mvnw install -DskipTests -f Utils/pom.xml
# Upload azure artifacts
- name: Upload azure artifacts
uses: actions/upload-artifact@v4
with:
name: azure-artifacts
path: /home/runner/.m2/repository/com/microsoft/azure/
retention-days: 1
# Upload hdinsight artifacts
- name: Upload hdinsight artifacts
uses: actions/upload-artifact@v4
with:
name: hdinsight-artifacts
path: /home/runner/.m2/repository/com/microsoft/hdinsight/
retention-days: 1
# Upload azuretools artifacts
- name: Upload azuretools artifacts
uses: actions/upload-artifact@v4
with:
name: azuretools-artifacts
path: /home/runner/.m2/repository/com/microsoft/azuretools/
retention-days: 1
# Prepare environment and build the plugin
build:
name: Build
needs: [ build-dependencies ]
runs-on: ubuntu-latest
outputs:
version: ${{ steps.properties.outputs.version }}
changelog: ${{ steps.properties.outputs.changelog }}
pluginVerifierHomeDir: ${{ steps.properties.outputs.pluginVerifierHomeDir }}
steps:
# Free GitHub Actions Environment Disk Space
- name: Maximize Build Space
uses: jlumbroso/[email protected]
with:
tool-cache: false
large-packages: false
# Download azure artifacts
- name: Download library artifacts
uses: actions/download-artifact@v4
with:
name: azure-artifacts
path: /home/runner/.m2/repository/com/microsoft/azure/
# Download hdinsight artifacts
- name: Download library artifacts
uses: actions/download-artifact@v4
with:
name: hdinsight-artifacts
path: /home/runner/.m2/repository/com/microsoft/hdinsight/
# Download azuretools artifacts
- name: Download library artifacts
uses: actions/download-artifact@v4
with:
name: azuretools-artifacts
path: /home/runner/.m2/repository/com/microsoft/azuretools/
# Check out the current repository
- name: Fetch Sources
uses: actions/checkout@v4
# Setup Java environment
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
# Setup Gradle
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
# Setup .NET 8 environment
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
# Set environment variables
- name: Export Properties
id: properties
working-directory: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider
shell: bash
run: |
PROPERTIES="$(./gradlew properties --console=plain -q)"
VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')"
CHANGELOG="$(./gradlew getChangelog --unreleased --no-header --console=plain -q)"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "pluginVerifierHomeDir=~/.pluginVerifier" >> $GITHUB_OUTPUT
echo "changelog<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
# Build plugin
- name: Build plugin
working-directory: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider
run: ./gradlew buildPlugin
# Prepare plugin archive content for creating artifact
- name: Prepare Plugin Artifact
id: artifact
working-directory: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider
shell: bash
run: |
cd ./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 artifact
uses: actions/upload-artifact@v4
with:
name: ${{ steps.artifact.outputs.filename }}
path: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider/build/distributions/content/*/*
# # Run tests and upload a code coverage report
# test:
# name: Test
# needs: [ build ]
# runs-on: ubuntu-latest
# steps:
#
# # Download azure artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: azure-artifacts
# path: /home/runner/.m2/repository/com/microsoft/azure/
#
# # Download hdinsight artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: hdinsight-artifacts
# path: /home/runner/.m2/repository/com/microsoft/hdinsight/
#
# # Download azuretools artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: azuretools-artifacts
# path: /home/runner/.m2/repository/com/microsoft/azuretools/
#
# # Check out the current repository
# - name: Fetch Sources
# uses: actions/checkout@v4
#
# # Set up Java environment for the next steps
# - name: Setup Java
# uses: actions/setup-java@v4
# with:
# distribution: zulu
# java-version: 17
#
# # Setup Gradle
# - name: Setup Gradle
# uses: gradle/actions/setup-gradle@v4
#
# # Setup .NET 8 environment
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# with:
# dotnet-version: '8.x'
#
# # Run tests
# - name: Run Tests
# working-directory: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider
# run: ./gradlew check
#
# # Collect Tests Result of failed tests
# - name: Collect Tests Result
# if: ${{ failure() }}
# uses: actions/upload-artifact@v4
# with:
# name: tests-result
# path: ${{ github.workspace }}/PluginsAndFeatures/azure-toolkit-for-rider/build/reports/tests
# # Run Qodana inspections and provide report
# inspectCode:
# name: Inspect code
# needs: [ build ]
# runs-on: ubuntu-latest
# permissions:
# contents: write
# checks: write
# pull-requests: write
# steps:
#
# # Free GitHub Actions Environment Disk Space
# - name: Maximize Build Space
# uses: jlumbroso/[email protected]
# with:
# tool-cache: false
# large-packages: false
#
# # Download azure artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: azure-artifacts
# path: /home/runner/.m2/repository/com/microsoft/azure/
#
# # Download hdinsight artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: hdinsight-artifacts
# path: /home/runner/.m2/repository/com/microsoft/hdinsight/
#
# # Download azuretools artifacts
# - name: Download library artifacts
# uses: actions/download-artifact@v4
# with:
# name: azuretools-artifacts
# path: /home/runner/.m2/repository/com/microsoft/azuretools/
#
# # Check out the current repository
# - name: Fetch Sources
# uses: actions/checkout@v4
# with:
# ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
# fetch-depth: 0 # a full history is required for pull request analysis
#
# # Set up Java environment for the next steps
# - name: Setup Java
# uses: actions/setup-java@v4
# with:
# distribution: zulu
# java-version: 17
#
# # Setup .NET 8 environment for the next steps
# - name: Setup .NET
# uses: actions/setup-dotnet@v4
# with:
# dotnet-version: '8.x'
#
# # Run Qodana inspections
# - name: Qodana - Code Inspection
# uses: JetBrains/[email protected]
# env:
# QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
# with:
# cache-default-branch-only: true
# Prepare a draft release for GitHub Releases page for the manual verification
# If accepted and published, release workflow would be triggered
releaseDraft:
name: Release draft
if: github.event_name != 'pull_request'
needs: [ build ]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
# Check out the current repository
- name: Fetch Sources
uses: actions/checkout@v4
# Remove old release drafts by using the curl request for the available releases with a draft flag
- name: Remove Old Release Drafts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api repos/{owner}/{repo}/releases \
--jq '.[] | select(.draft == true) | .id' \
| xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{}
# Create a new release draft which is not publicly visible and requires manual acceptance
- name: Create Release Draft
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "v${{ needs.build.outputs.version }}" \
--draft \
--title "v${{ needs.build.outputs.version }}" \
--notes "$(cat << 'EOM'
${{ needs.build.outputs.changelog }}
EOM
)"