Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
20 changes: 20 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Docker build context is the repo root (projects reference each other via ProjectReference),
# so keep the context small and free of local build artifacts.

**/node_modules
**/bin
**/obj
**/publish
**/.vs
**/.vscode-test
**/*.vsix
**/local.settings.json

durablefunctionsmonitor-vscodeext/backend
durablefunctionsmonitor-vscodeext/custom-backends
durablefunctionsmonitor-vscodeext/out
durablefunctionsmonitor.react/node_modules

.git
.github
readme
138 changes: 138 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
name: build

# Reusable build. Produces the NuGet packages and the VSIX, but never publishes anything.
# Called by pr-build.yml, main-build.yml and publish-nuget.yml.

on:
workflow_call:
inputs:
version:
description: 'Full package version to stamp (e.g. 6.9.0 or 6.9.0-preview.42)'
required: true
type: string
package-id-prefix:
description: 'Prefix applied to every package id, including the trailing dot. Empty = upstream ids.'
required: false
default: ''
type: string

jobs:
build:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v4

- name: create ArtifactStagingDirectory folder
run: mkdir drop

# Building and copying React

- name: npm install durablefunctionsmonitor.react
run: npm install -legacy-peer-deps
working-directory: durablefunctionsmonitor.react
- name: npm build durablefunctionsmonitor.react
run: npm run build
working-directory: durablefunctionsmonitor.react

- name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
run: |
rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics

# Building and testing .NET

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj -c Release

- name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated

- name: dotnet publish durablefunctionsmonitor.dotnetisolated
run: dotnet publish durablefunctionsmonitor.dotnetisolated -c Release -p:Version=${{ inputs.version }} --output drop/durablefunctionsmonitor.dotnetisolated/output
- name: dotnet publish dotnetIsolated-mssql
run: dotnet publish custom-backends/dotnetIsolated-mssql -c Release -p:Version=${{ inputs.version }} --output drop/dotnetIsolated-mssql/output
- name: dotnet publish dotnetIsolated-netherite
run: dotnet publish custom-backends/dotnetIsolated-netherite -c Release -p:Version=${{ inputs.version }} --output drop/dotnetIsolated-netherite/output

# Building nuget packages

- name: copy LICENSE.txt into each publish output
run: |
for d in durablefunctionsmonitor.dotnetisolated dotnetIsolated-mssql dotnetIsolated-netherite; do
cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/$d/output/
done

- name: Install latest nuget.exe
uses: nuget/setup-nuget@v4

- name: pack nuget packages
env:
VERSION: ${{ inputs.version }}
PREFIX: ${{ inputs.package-id-prefix }}
run: |
set -euo pipefail
pack () {
local dir="$1" base_id="$2"
local id="${PREFIX}${base_id}"
echo "::group::pack $id $VERSION"
nuget pack "drop/$dir/output/nuspec.nuspec" \
-Properties "id=$id;version=$VERSION" \
-OutputDirectory drop/packages
echo "::endgroup::"
}
pack durablefunctionsmonitor.dotnetisolated DurableFunctionsMonitor.DotNetIsolated
pack dotnetIsolated-mssql DurableFunctionsMonitor.DotNetIsolated.MsSql
pack dotnetIsolated-netherite DurableFunctionsMonitor.DotNetIsolated.Netherite
ls -la drop/packages

# Building the vscode extension.
# Custom backends ship as published binaries, because they reference
# durablefunctionsmonitor.dotnetisolated.* by project and cannot be built from the VSIX itself.

- name: copy dotnetisolated to durablefunctionsmonitor-vscodeext/backend
run: cp -r drop/durablefunctionsmonitor.dotnetisolated/output durablefunctionsmonitor-vscodeext/backend

- name: copy custom backends to durablefunctionsmonitor-vscodeext/custom-backends
run: |
mkdir -p durablefunctionsmonitor-vscodeext/custom-backends
cp -r drop/dotnetIsolated-mssql/output durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-mssql
cp -r drop/dotnetIsolated-netherite/output durablefunctionsmonitor-vscodeext/custom-backends/dotnetIsolated-netherite

- name: npm install durablefunctionsmonitor-vscodeext
run: npm install
working-directory: durablefunctionsmonitor-vscodeext
- name: npm install -g azure-functions-core-tools@4
run: npm install -g azure-functions-core-tools@4
working-directory: durablefunctionsmonitor-vscodeext
- name: run tests on durablefunctionsmonitor-vscodeext
# TODO: vscode test pipeline was broken, need to investigate and fix
if: 'false'
run: npm run test
working-directory: durablefunctionsmonitor-vscodeext
- name: package durablefunctionsmonitor-vscodeext to VSIX-file
run: npm run package
working-directory: durablefunctionsmonitor-vscodeext
- name: copy VSIX-file to ArtifactStagingDirectory
run: cp durablefunctionsmonitor-vscodeext/durablefunctionsmonitor*.vsix drop

# Publish artifacts

- name: upload nuget packages
uses: actions/upload-artifact@v4
with:
name: packages
path: drop/packages/*.nupkg
if-no-files-found: error

- name: upload vsix
uses: actions/upload-artifact@v4
with:
name: vsix
path: drop/*.vsix
if-no-files-found: error
131 changes: 42 additions & 89 deletions .github/workflows/main-build.yml
Original file line number Diff line number Diff line change
@@ -1,109 +1,62 @@

name: main-build

# Every push to main builds everything and publishes a prerelease of each package
# to GitHub Packages, so the custom backends can be consumed via PackageReference
# before a version is cut to nuget.org.

on:
workflow_dispatch:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
build:
permissions:
contents: read

runs-on: ubuntu-22.04
concurrency:
group: main-build
cancel-in-progress: false

jobs:
version:
runs-on: ubuntu-22.04
outputs:
version: ${{ steps.v.outputs.version }}
steps:
- uses: actions/checkout@v4

- name: create ArtifactStagingDirectory folder
run: mkdir drop

# Building and copying React

- name: npm install durablefunctionsmonitor.react
run: npm install -legacy-peer-deps
working-directory: durablefunctionsmonitor.react
- name: npm build durablefunctionsmonitor.react
run: npm run build
working-directory: durablefunctionsmonitor.react

- name: copy statics to durablefunctionsmonitor.dotnetbackend/DfmStatics
- name: derive prerelease version from Directory.Build.props
id: v
run: |
rm -rf durablefunctionsmonitor.dotnetbackend/DfmStatics
cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetbackend/DfmStatics
set -euo pipefail
PREFIX=$(sed -n 's:.*<VersionPrefix>\(.*\)</VersionPrefix>.*:\1:p' Directory.Build.props)
if [ -z "$PREFIX" ]; then echo "::error::VersionPrefix not found in Directory.Build.props"; exit 1; fi
echo "version=${PREFIX}-preview.${{ github.run_number }}" >> "$GITHUB_OUTPUT"

- name: copy statics to durablefunctionsmonitor.dotnetisolated/DfmStatics
run: |
rm -rf durablefunctionsmonitor.dotnetisolated/DfmStatics
cp -r durablefunctionsmonitor.react/build durablefunctionsmonitor.dotnetisolated/DfmStatics
build:
needs: version
uses: ./.github/workflows/build.yml
with:
version: ${{ needs.version.outputs.version }}

# Building and testing .NET
publish-github-packages:
needs: [ version, build ]
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- uses: actions/download-artifact@v4
with:
name: packages
path: packages

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 8.0.x

- name: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests
run: dotnet test tests/durablefunctionsmonitor.dotnetbackend.tests/*.csproj
- name: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests
run: dotnet test tests/durablefunctionsmonitor.dotnetisolated.core.tests/*.csproj

- name: copy durablefunctionsmonitor.dotnetbackend to ArtifactStagingDirectory
run: cp -r durablefunctionsmonitor.dotnetbackend drop/durablefunctionsmonitor.dotnetbackend

- name: copy durablefunctionsmonitor.dotnetisolated to ArtifactStagingDirectory
run: cp -r durablefunctionsmonitor.dotnetisolated drop/durablefunctionsmonitor.dotnetisolated

- name: dotnet publish durablefunctionsmonitor.dotnetbackend
run: dotnet publish durablefunctionsmonitor.dotnetbackend --output drop/durablefunctionsmonitor.dotnetbackend/output
- name: dotnet publish durablefunctionsmonitor.dotnetisolated
run: dotnet publish durablefunctionsmonitor.dotnetisolated --output drop/durablefunctionsmonitor.dotnetisolated/output

# Building and testing vscode extension

- name: copy dotnetbackend to durablefunctionsmonitor-vscodeext/backend
run: cp -r drop/durablefunctionsmonitor.dotnetbackend/output durablefunctionsmonitor-vscodeext/backend

- name: copy custom-backends to durablefunctionsmonitor-vscodeext/custom-backends
run: cp -r custom-backends durablefunctionsmonitor-vscodeext/custom-backends

- name: npm install durablefunctionsmonitor-vscodeext
run: npm install
working-directory: durablefunctionsmonitor-vscodeext
- name: npm install -g azure-functions-core-tools@4
run: npm install -g azure-functions-core-tools@4
working-directory: durablefunctionsmonitor-vscodeext
- name: run tests on durablefunctionsmonitor-vscodeext
# TODO: vscode test pipeline was broken, need to investigate and fix
if: 'false'
run: npm run test
working-directory: durablefunctionsmonitor-vscodeext
- name: package durablefunctionsmonitor-vscodeext to VSIX-file
run: npm run package
working-directory: durablefunctionsmonitor-vscodeext
- name: copy VSIX-file to ArtifactStagingDirectory
run: cp durablefunctionsmonitor-vscodeext/durablefunctionsmonitor*.vsix drop

# Building nuget packages

- name: copy LICENSE to durablefunctionsmonitor.dotnetbackend/output
run: cp LICENSE drop/durablefunctionsmonitor.dotnetbackend/output
- name: copy LICENSE.txt to durablefunctionsmonitor.dotnetisolated/output
run: cp durablefunctionsmonitor.dotnetisolated/LICENSE.txt drop/durablefunctionsmonitor.dotnetisolated/output

- name: Install latest nuget.exe
uses: nuget/setup-nuget@v1.2.0
- name: package dotnetbackend into a Nuget package
run: nuget pack drop/durablefunctionsmonitor.dotnetbackend/output/nuspec.nuspec -OutputDirectory drop
- name: package dotnetisolated into a Nuget package
run: nuget pack drop/durablefunctionsmonitor.dotnetisolated/output/nuspec.nuspec -OutputDirectory drop

# Publish artifacts

- name: publish artifacts
uses: actions/upload-artifact@v4.1.0
with:
path: drop

- name: push to GitHub Packages
run: |
dotnet nuget push "packages/*.nupkg" \
--source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
--api-key "${{ secrets.GITHUB_TOKEN }}" \
--skip-duplicate
22 changes: 22 additions & 0 deletions .github/workflows/pr-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: pr-build

# Validates every PR: builds React, runs the .NET tests, packs the NuGet packages
# and builds the VSIX. Publishes nothing.

on:
pull_request:
branches: [ "main" ]

permissions:
contents: read

concurrency:
group: pr-build-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
build:
uses: ./.github/workflows/build.yml
with:
# PR packages are never pushed, so the exact version only has to be valid and unique-ish
version: 0.0.0-pr${{ github.event.pull_request.number }}.${{ github.run_number }}
Loading