Skip to content

confif(mispelling): mispelling #75

confif(mispelling): mispelling

confif(mispelling): mispelling #75

Workflow file for this run

# Bringing together dev ymls
# qqqq TODO could share artifacts between jobs to reduce number of builds
# this should have just been BCLSource %LocalPackagePath% but set locally now
name: Dev pipeline for test lint packaging artifact and gh-page trigger
on:
# Trigger the workflow for push and pull requests to all branches except 'main' and 'master'
push:
branches-ignore:
- 'main'
- 'master'
# pull_request:
# branches-ignore:
# - 'main'
# - 'master'
permissions:
contents: write
actions: write
env:
# BUILD_CONFIGURATION: 'Debug'
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PACKAGES_TOKEN: ${{ secrets.PACKAGES_TOKEN }}
GITHUB_USERNAME: "Phil-NHS"
NUPKG_OUTPUT_PATH: ${{ github.workspace }}/CICDPackageLocation
IS_LOCAL_DEV: false
USE_BCL_PROJECT_REFERENCE: false
BCL_Local_Source: ${{ github.workspace }}/CICDPackageLocation
BCL_Source: "https://nuget.pkg.github.com/phil-nhs/index.json"
jobs:
branch-name-check:
name: Enforce Branch Name Convention
if: success() || failure() #Run all checks incase multiple fixes needed but dont make packages if there are fails
runs-on: ubuntu-latest
steps:
- name: Validate Branch Name
run: |
#BRANCH_NAME="${GITHUB_HEAD_REF}"
BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}"
echo "Validating branch name: $BRANCH_NAME"
if [[ "$BRANCH_NAME" =~ ^(feat|fix|bugfix|hotfix|build|chore|ci|docs|perf|refactor|revert|style|test)-[a-zA-Z0-9._/-]+$ ]] || [[ "$BRANCH_NAME" == "master" ]]; then
echo "✅ Branch name is valid"
else
echo "❌ Invalid branch name: $BRANCH_NAME"
echo "Branch names must follow one of the allowed prefixes:"
echo " feat-*, fix-*, bugfix-*, hotfix-*, build-*, chore-*, ci-*, docs-*, perf-*, refactor-*, revert-*, style-*, test-*"
exit 1
fi
continue-on-error: false
commitlint:
runs-on: ubuntu-latest
if: success() || failure() #Run all checks incase multiple fixes needed but dont make packages if there are fails
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: wagoid/commitlint-github-action@v5
with:
configFile: .commitlintrc.json
continue-on-error: false #we dont want to package etc if bad commits also pre-commit prefered
gitguardian-scan:
runs-on: ubuntu-latest
if: success() || failure() #Run all checks incase multiple fixes needed but dont make packages if there are fails
steps:
- uses: actions/checkout@v3
- name: GitGuardian Scan
uses: GitGuardian/gg-shield-action@v1
env:
GITGUARDIAN_API_KEY: ${{ secrets.GITGUARDIAN_API_KEY }}
continue-on-error: false # we dont want secrets going further and the keys need to be changed if this is triggered
Unit-Tests:
runs-on: ubuntu-latest
if: success() || failure() #Run all checks incase multiple fixes needed but dont make packages if there are fails
steps:
- name: See other project pipeline for Tests
run: echo "qqqq See other project pipeline for Tests this is a placeholder"
continue-on-error: false
E2E-Tests:
runs-on: ubuntu-latest
if: success() || failure() #Run all checks incase multiple fixes needed but dont make packages if there are fails
steps:
- name: See other project pipeline for Tests
run: echo "qqqq See other project pipeline for Tests this is a placeholder"
continue-on-error: false
# Now we've done due diligence
generate-dev-semantic-version:
if: success()
needs: [commitlint, gitguardian-scan, Unit-Tests, E2E-Tests, branch-name-check]
runs-on: ubuntu-latest
outputs:
dev-package-version: ${{ steps.set-dev-semantic-version.outputs.dev-semantic-version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Required for Semantic Release to analyze commit history
- name: Install Semantic Release Packages
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PACKAGES_TOKEN: ${{ secrets.PACKAGES_TOKEN }}
run: |
echo "Installing semantic-release packages..."
npm install -D \
semantic-release \
@semantic-release/changelog \
@semantic-release/git \
@semantic-release/commit-analyzer \
@semantic-release/release-notes-generator \
@semantic-release/github
echo "Semantic Release packages installed."
npm ls --depth=0 # Debug: List installed packages
#qqqq now pipeline is in use maybe just use git tag
#qqqq new approach version the branch
#qqqq do we really need to timestamp yeah but not in release so will grep only publish release there
- name: Run Semantic Version (None Blocking)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PACKAGES_TOKEN: ${{ secrets.PACKAGES_TOKEN }}
run: |
set +e
SEMVER_OUTPUT_RAW=$(npx semantic-release)
echo "Raw SEMVER_OUTPUT_RAW=$SEMVER_OUTPUT_RAW"
SEMVER_OUTPUT=$(echo "$SEMVER_OUTPUT_RAW" | grep -oP 'Published release \K[^\s]+')
# In dev even if there is no version change we will package and update the website, this means it will for ci which isnt necessary
# but also if we squash a load of commits we will still get the package updated
echo "In dev even if there is no version change we will package and update the website, this means it will for ci which isnt necessary but also if we squash a load of commits we will still get the package updated"
STATUS=$?
if [ -z "$SEMVER_OUTPUT" ]; then
SEMVER_OUTPUT=$(echo "$SEMVER_OUTPUT_RAW" | grep -oP 'Found git tag v\K[^\s]+')
fi
# Export the result to the environment
echo "SEMVER_OUTPUT=$SEMVER_OUTPUT" >> $GITHUB_ENV
set -e
- name: Rename Semver Version With Date Time Dev
id: set-dev-semantic-version
run: |
echo "Semantic Release Output $SEMVER_OUTPUT"
timestamp=$(date +"%y%m%d-%H%M")
echo "Timestamp $timestamp"
echo "shouldnt timestamp but ok for now qqqq"
full_version="${SEMVER_OUTPUT}-${timestamp}"
echo "extracted version $full_version"
echo "dev-semantic-version=$full_version" >> $GITHUB_OUTPUT
- name: debug github commands
run: |
echo "but we want more complex versioning currently so wont use tag but will for release qqqq"
echo "as we will name commits like fix(broken-thing): changed broken line, and branches fix/broken-thing we should be able to use them in package names"
echo "branch tag $(git describe --tags --abbrev=0)"
echo "branch name $(git branch --show-current)"
echo "Triggering Commit SHA: $GITHUB_SHA"
echo "Triggering Commit Subject: $(git log -1 --pretty=%s $GITHUB_SHA)"
echo "Commit Type/Scope: $(git log -1 --pretty=%s $GITHUB_SHA | cut -d':' -f1)"
build-bcl-dev-package-and-publish:
if: success() #not needed but being explicit
needs: [generate-dev-semantic-version, commitlint, gitguardian-scan,Unit-Tests,E2E-Tests, branch-name-check]
runs-on: ubuntu-latest
env:
BCL_VERSION: ${{ needs.generate-dev-semantic-version.outputs.dev-package-version }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json
- name: Debug Version Output BCL var
run: echo "Extracted Version $BCL_VERSION "
#qqqq are we a commit behind check that we use the new generated version of the package
# the restore cant be given env values to override values like it can in build so we need to remove this file so we use the env values
- name: Remove Local PackageSettings (CI Only)
run: rm -f PackageSettings.props.local
- name: Replace local environment variable in nuget config because cant provide it as a parameter
run: sed -i "s|%LocalPackagePath%|$BCL_Local_Source|g" nuget.config
#qqqq ask binon about this
- name: Clean lock files because the newly generated package file will superseed the locks
run: |
find . -name "packages.lock.json" -type f -exec rm -f {} \;
- name: Restore NuGet Packages for Specifically the BCL Package Library Project
run: dotnet restore Package.BlazorComponentLibrary/Package.BlazorComponentLibrary.csproj
- name: Build and Pack BlazorComponentLibrary
run: |
dotnet build Package.BlazorComponentLibrary -c Release \
/p:BCLVersion=$BCL_VERSION \
/p:NupkgOutputPath=$NUPKG_OUTPUT_PATH
# - name: List Created Package
# run: ls -l $BCL_Local_Source
# - name: echo path for artifact
# run: echo "${{ env.NUPKG_OUTPUT_PATH }}"
- name: echo hint information about restore
run: echo "if a hash error occurs for the bcl package the version number may need increasing or a clean step"
- name: Publish to GitHub DEV BCL Packages
run: |
dotnet nuget push "$BCL_Local_Source/TELBlazorComponentLibrary.GitPageBlazorWasm.*.nupkg" \
--source "https://nuget.pkg.github.com/phil-nhs/index.json" \
--api-key ${{ secrets.PACKAGES_TOKEN }} \
--skip-duplicate
Make-Blazor-Wiki-Artifact-Trigger-GH-Pages-In-BlazorWasmTest:
if: success() #not needed but being explicit
needs: [ branch-name-check, build-bcl-dev-package-and-publish,generate-dev-semantic-version, commitlint, gitguardian-scan, Unit-Tests, E2E-Tests]
runs-on: ubuntu-latest
env:
BCL_VERSION: ${{ needs.generate-dev-semantic-version.outputs.dev-package-version }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '8.0.x'
- name: Replace local environment variable in nuget config because cant provide it as a parameter
run: |
sed -i "s|%LocalPackagePath%|$BCL_Source|g" nuget.config
sed -i "s|%GITHUB_USERNAME%|$GITHUB_USERNAME|g" nuget.config
sed -i "s|%GITHUB_PACKAGES_TOKEN%|$PACKAGES_TOKEN |g" nuget.config
- name: debug BCL_VERSION
run: |
echo "BCL_VERSION $BCL_VERSION"
- name: Clean lock files because the newly generated package file will superseed the locks
run: |
find . -name "packages.lock.json" -type f -exec rm -f {} \;
- name: Restore NuGet Packages for Specifically the BCL Package Library Project
run: dotnet restore TestHostPrerenderWASM/TestHostPrerenderWASM.Client/TestHostPrerenderWASM.Client.csproj
- name: Publish client using client release .csproj logic
run: |
dotnet publish ./TestHostPrerenderWASM/TestHostPrerenderWASM.Client/TestHostPrerenderWASM.Client.csproj --configuration Release \
/p:IsLocalDev=$IS_LOCAL_DEV \
/p:BCLVersion=$BCL_VERSION \
/p:UseBCLProjectReference=$USE_BCL_PROJECT_REFERENCE
#include hidden so we get jekyll
- name: Creating artifact of publish folder for test gh page workflow
uses: actions/upload-artifact@v4
with:
name: gh-blazor-components-wiki-site-using-package-${{env.BCL_VERSION}}
include-hidden-files: true
path: |
./docs
./docs/.nojekyll # explicitly include the .nojekyll file
retention-days: 90
- name: Debug artifact location
run: |
# Get the artifact list for the current workflow run
ARTIFACT_LIST=$(gh api "repos/TechnologyEnhancedLearning/GitPageBlazorWASM/actions/runs/${GITHUB_RUN_ID}/artifacts")
# Echo the entire artifact list for debugging purposes
echo "Artifact List: $ARTIFACT_LIST"
# Extract the download URL from the artifact list (first artifact in the list)
#ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts[0].archive_download_url')
ARTIFACT_URL=$(echo "$ARTIFACT_LIST" | jq -r '.artifacts[0].url')
# Echo the artifact URL to confirm
echo "Artifact URL: $ARTIFACT_URL"
echo "artifact_url=$ARTIFACT_URL" >> $GITHUB_ENV
- name: Trigger Workflow in GitPageBlazorWASM-Test Repository
run: |
# Set the required variables
repo_owner="TechnologyEnhancedLearning" # Replace with the repository owner (organization or user)
repo_name="GitPageBlazorWASM-TestGHPage" # Replace with the repository name
event_type="artifact_ready"
#artifact_url="https://api.github.com/repos/TechnologyEnhancedLearning/GitPageBlazorWASM/actions/artifacts/2859947943"
# Trigger the workflow in another repository
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.PACKAGES_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/$repo_owner/$repo_name/dispatches \
-d "{\"event_type\": \"$event_type\", \"client_payload\": {\"artifact_url\": \"$artifact_url\"}}"
- name: Debug - List all files
run: |
echo "Listing files in the root directory:"
ls -al
echo "Listing files in the docs directory:"
ls -al ./docs
echo "Checking artifact details:"
gh api "repos/TechnologyEnhancedLearning/GitPageBlazorWASM/actions/runs/${GITHUB_RUN_ID}/artifacts"
# No this will be in the release branch that we do a prod wiki host
# - name: Deploy to GitHub Pages
# uses: JamesIves/github-pages-deploy-action@v4
# with:
# folder: docs # The folder the action should deploy
# branch: gh-pages # The branch the action should deploy to
# Previously we passed the value
# name: Deploy to GitHub Pages
# on:
# #push:
# # branches: [ master ]
# workflow_run:
# workflows: ["Build BCL Package"] # Name of the workflow to trigger from.
# types:
# - completed
# Same pipeline shouldnt need it now
# get-bcl-version:
# runs-on: ubuntu-latest
# outputs:
# bcl-version: ${{ steps.get-bcl-version-from-git-packages.outputs.latest-bcl-version }}
# steps:
# - name: Checkout repository
# uses: actions/checkout@v3
# - name: Get BCL Version from Git Packages
# id: get-bcl-version-from-git-packages
# run: |
# TOKEN="$GITHUB_TOKEN"
# OWNER="Phil-NHS"
# PACKAGE_NAME="TELBlazorComponentLibrary.GitPageBlazorWasm"
# BCL_PACKAGE_PATH="https://api.github.com/users/$OWNER/packages/nuget/$PACKAGE_NAME/versions"
# echo "API Path: $BCL_PACKAGE_PATH"
# VERSION_JSON=$(curl -s -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.github+json" $BCL_PACKAGE_PATH)
# echo "$VERSION_JSON"
# LATEST_VERSION=$(echo "$VERSION_JSON" | jq -r '.[0].name')
# echo "latest-bcl-version=$LATEST_VERSION" >> $GITHUB_OUTPUT
# - name: Run Semantic Dev Release
# id: set-dev-semantic-version
# run: |
# npx semantic-release
# echo "dev-version=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - name: Debug Git Remote Branches
# run: git remote show origin
# - name: Check Existing Tags
# run: |
# echo "Checking existing tags..."
# git fetch --tags
# git tag -l # List all tags to see if there are any conflicts
# - name: Run Semantic Release Dry Run
# run: |
# echo "Running Semantic Release dry run..."
# SEMVER_OUTPUT_DRY=$(npx semantic-release --dry-run)
# echo "Dry run output $SEMVER_OUTPUT_DRY"
# - name: Get Semantic Version
# id: set-dev-semantic-version
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# run: |
# echo "Running Semantic Release dry run..."
# SEMVER_OUTPUT=$(npx semantic-release --dry-run)
# echo "Semantic Release Output: $SEMVER_OUTPUT"
# # Debug: Check exit code of semantic-release
# SEMVER_EXIT_CODE=$?
# echo "Semantic Release Exit Code: $SEMVER_EXIT_CODE"
# SEMVER_VERSION=$(npx semantic-release --dry-run | grep -oP 'Published release \K[\d.]+')
# #SEMVER_VERSION=$(npx semantic-release --dry-run | grep -oP 'Published release \K[\d.]+' || echo "0.1.0")
# TIMESTAMP=$(date +"%y%m%d-%H-%M-%S")
# BRANCH_NAME=$(echo "${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" | sed 's/[^a-zA-Z0-9.-]/_/g')
# FULL_VERSION="${SEMVER_VERSION}-DEV-${BRANCH_NAME}-${TIMESTAMP}"
# echo "Extracted Version: $FULL_VERSION"
# echo "dev-semantic-version=$FULL_VERSION" >> $GITHUB_OUTPUT