mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-03 16:21:46 +00:00
166 lines
5.7 KiB
YAML
166 lines
5.7 KiB
YAML
# This workflow uses actions that are not certified by GitHub.
|
|
# They are provided by a third-party and are governed by
|
|
# separate terms of service, privacy policy, and support
|
|
# documentation.
|
|
|
|
name: Test
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
# push:
|
|
# branches: [ "master" ]
|
|
# pull_request:
|
|
# branches: [ "master" ]
|
|
|
|
env:
|
|
# Path to the solution file relative to the root of the project.
|
|
SOLUTION_FILE_PATH: .
|
|
|
|
# Configuration type to build.
|
|
# You can convert this to a build matrix if you need coverage of multiple configuration types.
|
|
# https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
|
|
BUILD_CONFIGURATION: Release
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Extract Version
|
|
id: get_version
|
|
working-directory: ${{ github.workspace }}
|
|
shell: powershell
|
|
run: |
|
|
# Ensure the file exists before proceeding
|
|
$resourceFile = ".\OptiScaler\resource.h"
|
|
if (-Not (Test-Path $resourceFile)) {
|
|
Write-Error "File not found: $resourceFile"
|
|
exit 1
|
|
}
|
|
|
|
# Helper function to extract the first matching line for a version component
|
|
function Get-Version-Component {
|
|
param (
|
|
[string]$pattern,
|
|
[string]$replacement
|
|
)
|
|
# Use Select-String and take only the first match
|
|
$line = Get-Content $resourceFile | Select-String -Pattern $pattern | Select-Object -First 1
|
|
if ($line) {
|
|
return ($line.Line -replace $replacement).Trim()
|
|
} else {
|
|
Write-Error "Pattern not found: $pattern"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# Extract version components (only the first match for each pattern)
|
|
$majorVersion = Get-Version-Component 'VER_MAJOR_VERSION' '#define VER_MAJOR_VERSION\s+'
|
|
$minorVersion = Get-Version-Component 'VER_MINOR_VERSION' '#define VER_MINOR_VERSION\s+'
|
|
$hotfixVersion = Get-Version-Component 'VER_HOTFIX_VERSION' '#define VER_HOTFIX_VERSION\s+'
|
|
$buildVersion = Get-Version-Component 'VER_BUILD_NUMBER' '#define VER_BUILD_NUMBER\s+'
|
|
|
|
# Merge into a single version string
|
|
$version = "v$majorVersion.$minorVersion.$hotfixVersion-pre$buildVersion"
|
|
|
|
# Get the current date in a specific format (e.g., YYYYMMDD)
|
|
$date = Get-Date -Format "yyyyMMdd"
|
|
|
|
# Construct the output filename with version and date
|
|
$outputFileName = "OptiScaler_${version}_${date}"
|
|
|
|
# Output the generated filename
|
|
Write-Output "Generated Filename: $outputFileName"
|
|
|
|
# Write outputs to GITHUB_OUTPUT
|
|
"version=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
|
"filename=$outputFileName" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
|
|
|
|
continue-on-error: false
|
|
|
|
- name: Debug Outputs
|
|
run: |
|
|
echo "Version: ${{ steps.get_version.outputs.version }}"
|
|
echo "Filename: ${{ steps.get_version.outputs.filename }}"
|
|
|
|
- name: Create Nightly Release (if not exists)
|
|
id: create_release
|
|
if: steps.check_release.outputs.release_exists == 'false'
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const release = await github.rest.repos.createRelease({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
tag_name: "nightly",
|
|
name: "Nightly Builds",
|
|
body: "This is an automated nightly build release.",
|
|
draft: false,
|
|
prerelease: true,
|
|
});
|
|
core.setOutput("release_id", release.data.id);
|
|
core.setOutput("upload_url", release.data.upload_url);
|
|
|
|
- name: Check Existing Release
|
|
id: check_release
|
|
uses: actions/github-script@v6
|
|
with:
|
|
script: |
|
|
const releaseTag = "nightly";
|
|
try {
|
|
const release = await github.rest.repos.getReleaseByTag({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
tag: releaseTag,
|
|
});
|
|
core.setOutput("release_exists", true);
|
|
core.setOutput("release_id", release.data.id);
|
|
core.setOutput("upload_url", release.data.upload_url);
|
|
} catch (error) {
|
|
if (error.status === 404) {
|
|
core.setOutput("release_exists", false);
|
|
} else {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
- name: Get Commit Messages From Last Day
|
|
id: commit_messages
|
|
working-directory: ${{ github.workspace }}
|
|
shell: powershell
|
|
run: |
|
|
Write-Output "Fetching commits from the last 24 hours..."
|
|
|
|
$location = Get-Location
|
|
Write-Output "Folder: $location`n"
|
|
|
|
$datetime = Get-Date
|
|
Write-Output "Datetime: $datetime`n"
|
|
|
|
#--grep=".yml" --invert-grep
|
|
|
|
# Get commit messages excluding .yml file commits
|
|
$commits = git log --since="1 day ago" --pretty=format:"%h %s (%an)" --abbrev-commit
|
|
Write-Output "Commits: $commits`n"
|
|
|
|
# If no commits are found, cancel the workflow
|
|
if ([string]::IsNullOrEmpty($commits)) {
|
|
Write-Output "No relevant commits in the last 24 hours. Cancelling workflow."
|
|
exit 0
|
|
}
|
|
|
|
# Generate release notes
|
|
$releaseNotes = "### Changes in the Last 24 Hours`n`n$commits"
|
|
|
|
Write-Output "$releaseNotes"
|
|
|
|
$ReleaseTag = "nightly"
|
|
Write-Output "Updating existing release: $ReleaseTag"
|
|
gh release edit $ReleaseTag --notes "$ReleaseNotes"
|
|
|