125 lines
3.5 KiB
YAML
125 lines
3.5 KiB
YAML
name: CI/CD Pipeline
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- master
|
|
- develop
|
|
tags:
|
|
- 'v*'
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- master
|
|
|
|
jobs:
|
|
build:
|
|
name: Build and Test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup .NET SDK
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: '8.0.x'
|
|
|
|
- name: Restore class library
|
|
run: dotnet restore classlib/classlib.csproj
|
|
|
|
- name: Restore test project
|
|
run: dotnet restore classlib.tests/classlib.tests.csproj
|
|
|
|
- name: Build class library
|
|
run: dotnet build classlib/classlib.csproj --configuration Release --no-restore
|
|
|
|
- name: Build test project
|
|
run: dotnet build classlib.tests/classlib.tests.csproj --configuration Release --no-restore
|
|
|
|
- name: Run tests
|
|
run: dotnet test classlib.tests/classlib.tests.csproj --configuration Release --no-build --verbosity normal --logger "trx;LogFileName=test-results.trx" --collect:"XPlat Code Coverage"
|
|
|
|
- name: Upload test results
|
|
uses: actions/upload-artifact@v3
|
|
if: always()
|
|
with:
|
|
name: test-results
|
|
path: classlib.tests/TestResults/
|
|
retention-days: 30
|
|
|
|
package:
|
|
name: Package Module
|
|
runs-on: ubuntu-latest
|
|
needs: build
|
|
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/v'))
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup .NET SDK
|
|
uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: '8.0.x'
|
|
|
|
- name: Build Release
|
|
run: dotnet build classlib/classlib.csproj --configuration Release
|
|
|
|
- name: Create module package
|
|
run: |
|
|
mkdir -p output/ps.ipam
|
|
|
|
# Copy compiled DLL
|
|
cp classlib/bin/Release/netstandard2.1/ps.ipam.dll output/ps.ipam/
|
|
|
|
# Copy module manifest and related files
|
|
cp ps.ipam.psd1 output/ps.ipam/
|
|
cp ps.ipam.psm1 output/ps.ipam/
|
|
cp LICENSE output/ps.ipam/
|
|
cp README.md output/ps.ipam/
|
|
|
|
# Copy types directory
|
|
cp -r types output/ps.ipam/
|
|
|
|
# Copy functions directory
|
|
cp -r functions output/ps.ipam/
|
|
|
|
# Copy images directory
|
|
cp -r images output/ps.ipam/
|
|
|
|
- name: Upload module artifact
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ps.ipam-module
|
|
path: output/ps.ipam/
|
|
retention-days: 90
|
|
|
|
release:
|
|
name: Create Release
|
|
runs-on: ubuntu-latest
|
|
needs: package
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
steps:
|
|
- name: Download module artifact
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: ps.ipam-module
|
|
path: ps.ipam
|
|
|
|
- name: Create release archive
|
|
run: |
|
|
zip -r ps.ipam-${{ github.ref_name }}.zip ps.ipam/
|
|
tar -czvf ps.ipam-${{ github.ref_name }}.tar.gz ps.ipam/
|
|
|
|
- name: Create Gitea Release
|
|
uses: actions/gitea-release-action@v1
|
|
with:
|
|
token: ${{ secrets.TOKEN }}
|
|
files: |
|
|
ps.ipam-${{ github.ref_name }}.zip
|
|
ps.ipam-${{ github.ref_name }}.tar.gz
|
|
title: Release ${{ github.ref_name }}
|
|
draft: false
|
|
prerelease: ${{ contains(github.ref_name, '-') }}
|