name: Build and Test (Reusable) on: workflow_call: outputs: artifact-path: description: "Artifact path" value: ${{ jobs.build.outputs.artifact-path }} build-tag: description: "Build tag" value: ${{ jobs.build.outputs.build-tag }} commit-hash: description: "Commit hash" value: ${{ jobs.build.outputs.commit-hash }} env: DOTNET_VERSION: '10.0.x' jobs: build: runs-on: ubuntu-latest timeout-minutes: 15 outputs: artifact-path: quantengine-${{ steps.metadata.outputs.commit }}.tar.gz build-tag: build-${{ steps.metadata.outputs.commit }}-${{ github.run_number }} commit-hash: ${{ steps.metadata.outputs.commit }} steps: - name: Checkout Code uses: actions/checkout@v3 with: fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v3 with: dotnet-version: ${{ env.DOTNET_VERSION }} - name: Generate Build Metadata id: metadata run: | COMMIT=$(git rev-parse --short HEAD) BUILD_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ') echo "commit=${COMMIT}" >> $GITHUB_OUTPUT echo "build-time=${BUILD_TIME}" >> $GITHUB_OUTPUT - name: Restore Dependencies run: dotnet restore src/dotnet/QuantEngine.Web/QuantEngine.Web.csproj - name: Build Release run: | dotnet build src/dotnet/QuantEngine.Web/QuantEngine.Web.csproj \ -c Release --no-restore - name: Run Unit Tests run: | dotnet test src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj \ -c Release --no-build || true - name: Publish Release Package run: | dotnet publish src/dotnet/QuantEngine.Web/QuantEngine.Web.csproj \ -c Release --no-build -o ./publish - name: Create Version Metadata run: | mkdir -p ./publish/wwwroot cat > ./publish/wwwroot/version.json < /dev/null || exit 1 - name: Upload Build Artifact uses: actions/upload-artifact@v3 with: name: quantengine-build-${{ github.run_number }} path: quantengine-${{ steps.metadata.outputs.commit }}.tar.gz retention-days: 5