Skip to content

Commit

Permalink
Merge branch 'master' into feature/purgemods
Browse files Browse the repository at this point in the history
  • Loading branch information
jupster authored Oct 13, 2024
2 parents 004f55a + 4017482 commit a6b1ee8
Show file tree
Hide file tree
Showing 25 changed files with 515 additions and 244 deletions.
114 changes: 90 additions & 24 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,25 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
name: "Code Analysis"

on:
push:
push: # The master branch must be analyzed on a new commit
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
# Any PR on master must be analyzed
branches: [ master ]
schedule:
- cron: '39 18 * * 0'
workflow_dispatch:
workflow_dispatch: # CodeQL can be triggered manually

jobs:
analyze:
name: Analyze
runs-on: [self-hosted, windows-latest]
analyzeQL:
name: Analyze with CodeQL
# runs-on: [windows-latest] # may cause Out of Memory errors
runs-on: [self-hosted]

permissions:
# required for all workflows
security-events: write

# required to fetch internal or private CodeQL packs
packages: read

strategy:
fail-fast: false
Expand All @@ -33,20 +28,91 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4.1.2
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}


- name: Setup .NET Core SDK
uses: actions/[email protected]
with:
dotnet-version: 7.x
dotnet-version: ${{vars.DOTNET_VERSION}}

- run: dotnet restore
- run: dotnet build ./FASTER.sln --configuration Debug

- name: Build Solution
run: dotnet build ./FASTER.sln --configuration Debug

- name: Execute unit tests
run: dotnet test

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3

AnalysisSonar:
name: Analyze with SonarCloud
runs-on: windows-latest
permissions:
pull-requests: write # allows SonarCloud to decorate PRs with analysis results

# steps: # DOES NOT SCAN FOR SOME REASON ?
# - name: Analyze with SonarCloud

# # You can pin the exact commit or the version.
# uses: SonarSource/sonarcloud-github-action@v3
# env:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# with:
# # Additional arguments for the SonarScanner CLI
# args:
# -Dsonar.projectKey=Foxlider_FASTER
# -Dsonar.organization=foxlicorp
# projectBaseDir: .


steps:
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'zulu' # Alternative distribution options are available.

- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~\sonar\cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar

- name: Cache SonarCloud scanner
id: cache-sonar-scanner
uses: actions/cache@v4
with:
path: .\.sonar\scanner
key: ${{ runner.os }}-sonar-scanner
restore-keys: ${{ runner.os }}-sonar-scanner

- name: Install SonarCloud scanner
if: steps.cache-sonar-scanner.outputs.cache-hit != 'true'
shell: pwsh
run: |
New-Item -Path .\.sonar\scanner -ItemType Directory
dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.PR_DECORATION }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
shell: pwsh
run: |
.\.sonar\scanner\dotnet-sonarscanner begin /k:"Foxlider_FASTER" /o:"foxlicorp" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io"
dotnet build
.\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
3 changes: 2 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ jobs:
identifier: Foxlider.FASTER
installers-regex: 'Release_x64.zip'
max-versions-to-keep: 5
token: ${{ secrets.WINGET_TOKEN }} # Classic Personal Access Token with [public_repo, workflow] scopes
# Classic Personal Access Token with [public_repo, workflow] scopes
token: ${{ secrets.WINGET_TOKEN }}
212 changes: 212 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
name: "Release Generator"

# after successful analysis on the main branch, a new pre-release is generated
on:
#Makes a Nighly release on a new commit.
workflow_run:
workflows: [Code Analysis]
types: [completed]
branches: [master]

#Makes a Release on tag
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
workflow_dispatch: # ReleaseGen can be triggered manually

env:
IS_RELEASE: ${{ github.ref_type == 'tag' }}
ZIP_NAME: ${{ github.ref_type == 'tag' && 'Release_' || 'Release_Nightly_' }}
ZIP_PATH: ${{ github.ref_type == 'tag' && 'FASTER_' || 'FASTER_Nightly_' }}

jobs:

# BUILD APP
build:

strategy:
matrix:
# runtime: [x64, x86]
runtime: [x64]

runs-on: windows-latest # For a list of available runner types, refer to
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on

env:
Configuration: Release
Solution_Name: FASTER # Replace with your solution name, i.e. MyWpfApp.sln.
Test_Project_Path: FASTERTests\FASTERTests.csproj # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.
Wap_Project_Directory: FASTER # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package.
Wap_Project_Path: FASTER.App.Package\FASTER.Package.wapproj # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj.

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

# Install the .NET Core workload
- name: Install .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{vars.DOTNET_VERSION}}

# Execute all unit tests in the solution
- name: Execute unit tests
run: dotnet test

# Restore the application to populate the obj folder with RuntimeIdentifiers
- name: Restore the application
run: dotnet restore

# Build
- name: Build the application
run: dotnet build --configuration $env:Configuration -a $env:Runtime ./FASTER/FASTER.csproj
env:
Runtime: ${{ matrix.runtime }}

# Pub
- name: Publish the application ${{ matrix.runtime }}
run: dotnet publish --configuration $env:Configuration -a $env:Runtime --self-contained true /p:useapphost=true --output .\$env:ZIP_NAME$env:Runtime ./FASTER/FASTER.csproj
env:
Runtime: ${{ matrix.runtime }}

# Zip the folder
- name: Zip the application folder
run: Compress-Archive -Path .\$env:ZIP_NAME$env:Runtime\* -DestinationPath .\$env:ZIP_NAME$env:Runtime.zip
shell: pwsh
env:
Runtime: ${{ matrix.runtime }}

# Get version number
- name: get-net-sdk-project-versions-action
uses: kzrnm/[email protected]
id: get-version
with:
proj-path: ./FASTER/FASTER.csproj

# Get Changes between Tags
- name: Generate Changelog
id: get-changes
run: |
Write-Output "::group::Collecting Changes between Tags..."
# Set options from inputs
$tagPattern = "^v?\d\.\d+([a-zA-Z]|\.\d+([a-zA-Z])?)?"
$linePrefix = "- "
# Fetch all tags from origin
git fetch origin --tags --force
# Get tags that match the pattern and sort them using version sorting in reverse
$tags = git tag --sort=committerdate -l | Select-String -Pattern $tagPattern | Sort-Object -Descending || ""
# Count the found tags
$countTags = ($tags -split "`n").Count
# Exit with error if no tags are found
if ($tags -eq "" -or $countTags -le 0) {
Write-Output "::error title=no tags found::changes-between-tags action could not find any tags to work with"
exit 1
}
# Take the first tag as latestTag
$latestTag = ($tags -split "`n")[0]
# Get changes for range
# Check if the latest tag is on the last commit
$latestCommit = git rev-parse HEAD
$latestTagCommit = git rev-list -n 1 $latestTag
if ($latestCommit -eq $latestTagCommit -and $countTags -gt 1) {
# Use the previous tag if the latest tag is on the last commit
$latestTag = ($tags -split "`n")[1]
}
$range = "$latestTag" + "..@"
$changes = git log --pretty=reference --no-decorate $range
# If set, add a prefix to every commit message
if ($linePrefix) {
$changes = $changes -replace "^(.*)$", "$linePrefix`$1"
}
# Set outputs
$EOF = (New-Guid).Guid
"changes<<$EOF" >> $env:GITHUB_OUTPUT
$changes >> $env:GITHUB_OUTPUT
"$EOF" >> $env:GITHUB_OUTPUT
"tag=$latestTag" >> $env:GITHUB_OUTPUT
# Log the results
Write-Output "tag: $latestTag"
Write-Output "changes:"
Write-Output $changes
# End log grouping
Write-Output "::endgroup::"
shell: pwsh

# Set Version Number to environment
- name: Set Version
id: set_version
run: |
if ($env:IS_RELEASE -eq "true") {
echo "VERSION=$env:GITHUB_REF" >> $env:GITHUB_ENV
} else {
echo "VERSION=${{ steps.get-version.outputs.version }}" >> $env:GITHUB_ENV
}
shell: pwsh

#Create Release
- name: Create Release
if: env.IS_RELEASE == 'true'
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: '${{ env.VERSION }}'
release_name: 'Release ${{ env.VERSION }}'
body: |
Changelog since release ${{ steps.get-changes.outputs.tag }} :
---
${{ steps.get-changes.outputs.changes }}
---
draft: false
prerelease: ${{ env.IS_RELEASE == 'false' }}

# Upload Artifacts
- name: Upload Release Asset
if: env.IS_RELEASE == 'true'
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Runtime: ${{ matrix.runtime }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: .\${{ env.ZIP_NAME}}${{ env.Runtime }}.zip
asset_name: ${{ env.ZIP_NAME}}${{ env.Runtime }}.zip
asset_content_type: application/zip

# Create Nightly Release
- name: Create Nightly Release
if: env.IS_RELEASE == 'false'
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Runtime: ${{ matrix.runtime }}
with:
tag_name: nightly
name: 'Nightly Release v${{ env.VERSION }}'
body: |
Changelog since release ${{ steps.get-changes.outputs.tag }} :
---
${{ steps.get-changes.outputs.changes }}
---
prerelease: true
files: .\${{ env.ZIP_NAME}}${{ env.Runtime }}.zip
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ For changes that address core functionality or would require breaking changes (e
In general, we follow the ["fork-and-pull" Git workflow](https://github.com/susam/gitpr)
While a bit different, it is generally the same idea.

1. Fork the repository to your own Github account
1. Fork the repository to your own GitHub account
2. Clone the project to your machine
3. Create a branch locally with a succinct but descriptive name. It is preferred to branch from the current update branch that should be named feature/Update-X.Y
3. Create a branch locally with a succinct but descriptive name. It is preferred to branch from the current update branch that should be named `feature/shortName`
4. Commit changes to the branch
5. Following any formatting and testing guidelines specific to this repo
6. Push changes to your fork
Expand Down
Loading

0 comments on commit a6b1ee8

Please sign in to comment.