Skip to content

Nightly Prerelease build on Main #145

Nightly Prerelease build on Main

Nightly Prerelease build on Main #145

name: Nightly Prerelease build on Main
on:
schedule:
- cron: '0 23 * * 1-5' # This is 1:00 AM Berlin time from Monday to Friday
workflow_dispatch: # Allows manual triggering
env:
BRANCH_SUFFIX: latest
VERSION_SUFFIX: alpha
jobs:
check-for-changes:
runs-on: windows-latest
name: Check for changes between HEAD and last created tag
if: github.event_name != 'schedule' || github.repository == 'eclipse-aaspe/server'
outputs:
branch_changed: ${{ steps.check_changes.outputs.changes_detected }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check changes since last tag
id: check_changes
run: |
git fetch --tags
$tags = git tag --sort=-creatordate
Write-Host "Tags: $tags"
$branchSuffix = "${{ env.BRANCH_SUFFIX }}"
$potentialTags = @()
foreach ($tag in $tags)
{
if ($tag -match ".*-$branchSuffix$")
{
$potentialTags += $tag
}
}
if ($potentialTags.Count -gt 0)
{
$latestTag = $potentialTags[0]
Write-Host "Latest found matching tag is $latestTag"
}
else
{
Write-Host "No matching tags found, fetching the latest tag."
$latestTag = $tags | Select-Object -First 1
if ($latestTag)
{
echo "from_tag=$latestTag" >> $env:GITHUB_OUTPUT
Write-Host "Latest found tag is $latestTag"
}
else
{
Write-Host "No tags found at all."
exit 1
}
}
Write-Host "Checking changes since tag: $latestTag"
$range = "$latestTag..@"
Write-Host "Check for changes in range: $range"
$changes = git log $range --oneline
Write-Host "Found changes: $changes"
if (-not [string]::IsNullOrEmpty($changes))
{
Write-Host "Changes detected since $latestTag"
Write-Host "$changes"
echo "changes_detected=true" >> $env:GITHUB_OUTPUT
}
else
{
Write-Host "No changes detected since $latestTag."
echo "changes_detected=false" >> $env:GITHUB_OUTPUT
}
shell: pwsh
create-new-prerelease:
runs-on: windows-latest
name: Create a new prerelease build and attach built packages to release
needs: check-for-changes
permissions:
contents: write
pull-requests: write
if: needs.check-for-changes.outputs.branch_changed == 'true'
outputs:
VERSION_NUMBER: ${{ steps.generate_version_number.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set execution policy
run: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
shell: pwsh
- name: Extract branch name
id: extract_branch
run: |
$branch = '${{ github.ref }}' -replace 'refs/heads/', ''
echo "branch=$branch" >> $env:GITHUB_OUTPUT
Write-Host "The current branch is: $branch"
shell: pwsh
- name: Get the newest tag
id: get_latest_tag
run: |
git fetch --tags
$tags = git tag --sort=-creatordate
$branchSuffix = "${{ env.BRANCH_SUFFIX }}"
$potentialTags = @()
foreach ($tag in $tags) {
if ($tag -match ".*-$branchSuffix$") {
$potentialTags += $tag
}
}
if ($potentialTags.Count -gt 0) {
$newestStableTag = $potentialTags[0]
echo "from_tag=$newestStableTag" >> $env:GITHUB_OUTPUT
Write-Host "Latest found tag is $newestStableTag"
} else {
Write-Host "No matching tags found, fetching the latest tag."
$latestTag = $tags | Select-Object -First 1
if ($latestTag) {
echo "from_tag=$latestTag" >> $env:GITHUB_OUTPUT
Write-Host "Latest found tag is $latestTag"
} else {
Write-Host "No tags found at all."
exit 1
}
}
shell: pwsh
- name: Generate Version Number
working-directory: src
id: generate_version_number
run: |
$branch = '${{ steps.extract_branch.outputs.branch }}'
$version = .\BuildVersionNumber.ps1 -suffix $VERSION_SUFFIX -branch $branch -githubRunNumber ${{ github.run_number }}
echo "version=$version" >> $env:GITHUB_OUTPUT
Write-Host "The version name to build is: $version"
shell: pwsh
- name: Update version numbers in project
working-directory: src
run: |
$version = '${{ steps.generate_version_number.outputs.version }}'
Write-Host "Updating project versions to: $version"
.\UpdateProjectVersions.ps1 -version $version
shell: pwsh
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Build release
working-directory: src
run: .\BuildForRelease.ps1
shell: pwsh
- name: Package release
working-directory: src
run: |
$version = 'v${{ steps.generate_version_number.outputs.version }}'
mkdir -p artefacts/release/$version
Write-Host "Packaging for the release version: $version"
.\PackageRelease.ps1 -version $version
shell: pwsh
- name: Rename the release assets
working-directory: .
run: |
$version = 'v${{ steps.generate_version_number.outputs.version }}'
$releaseDir = Join-Path $(Get-Location) "artefacts/release/$version"
Write-Host "Release directory: $releaseDir"
if (!(Test-Path $releaseDir)) {
throw "The release directory does not exist: $releaseDir"
}
$archives = Get-ChildItem $releaseDir -Filter *.zip
foreach($archive in $archives) {
$path = $archive.FullName
Write-Host "The path to the archive is: $path"
$nameWoExt = [io.path]::GetFileNameWithoutExtension($path)
Write-Host "The name without extension is: $nameWoExt"
$target = Join-Path $releaseDir ($nameWoExt + "." + $version + ".zip")
Write-Host "Moving: $path -> $target"
Move-Item -Path $path -Destination $target
}
shell: pwsh
- name: Create Git tag
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git tag v${{ steps.generate_version_number.outputs.version }}
git push origin v${{ steps.generate_version_number.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Generate release notes
id: generate_release_notes
uses: mikepenz/release-changelog-builder-action@v4
with:
configuration: ".github/changelog_configuration.json"
token: ${{ secrets.GITHUB_TOKEN }}
fromTag: "${{ steps.get_latest_tag.outputs.from_tag }}"
toTag: "v${{ steps.generate_version_number.outputs.version }}"
fetchViaCommits: "true"
ignorePreReleases: "false"
fetchReleaseInformation: "true"
failOnError: "true"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub release
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: "v${{ steps.generate_version_number.outputs.version }}"
name: "v${{ steps.generate_version_number.outputs.version }}"
draft: false
prerelease: true
body: ${{ steps.generate_release_notes.outputs.changelog }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload the release assets
uses: AButler/upload-release-assets@v3.0
with:
files: "artefacts/release/v${{ steps.generate_version_number.outputs.version }}/*.zip"
repo-token: ${{ secrets.GITHUB_TOKEN }}
release-tag: "v${{ steps.generate_version_number.outputs.version }}"
build-and-publish-docker-release-images:
runs-on: ubuntu-latest
name: Create new docker builds with latest prerelease and upload to DockerHub
needs: create-new-prerelease
if: github.repository == 'eclipse-aaspe/server'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
platforms: linux/amd64,linux/arm64,linux/arm32
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: adminshellio
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Set version number
id: set-version
run: echo "VERSION_NUMBER=$(echo ${{ needs.create-new-prerelease.outputs.VERSION_NUMBER }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
- name: Determine Docker tag
id: set-docker-tag
run: |
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
echo "tag=main" >> $GITHUB_OUTPUT
else
echo "tag=develop" >> $GITHUB_OUTPUT
fi
- name: Build and publish multi-architecture Docker image for AASX Server Blazor
uses: docker/build-push-action@v6
with:
push: true
file: ./src/docker/Dockerfile-AasxServerBlazor
platforms: |
linux/amd64
linux/arm/v6
linux/arm/v7
linux/arm64
tags: |
adminshellio/aasx-server-blazor-for-demo:${{ steps.set-docker-tag.outputs.tag }}
adminshellio/aasx-server-blazor-for-demo:${{ env.VERSION_NUMBER }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version=${{ env.VERSION_NUMBER }}"
- name: Build and publish multi-architecture Docker image for AasxServerCore
uses: docker/build-push-action@v6
with:
push: true
file: ./src/docker/Dockerfile-AasxServerAspNetCore
platforms: |
linux/amd64
linux/arm/v6
linux/arm/v7
linux/arm64
tags: |
adminshellio/aasx-server-aspnetcore-for-demo:${{ steps.set-docker-tag.outputs.tag }}
adminshellio/aasx-server-aspnetcore-for-demo:${{ env.VERSION_NUMBER }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version=${{ env.VERSION_NUMBER }}"
# --------------------------------------------------------------------------------------------------
# These are the old specific docker image builds. We need to decide, if we want to delete them
# and only use the multi-platform builds
# --------------------------------------------------------------------------------------------------
- name: Build and publish AasxServerBlazor-arm32
uses: docker/build-push-action@v6
with:
push: true
load: true
file: ./src/docker/Dockerfile-AasxServerBlazor
platforms: linux/arm/v7
tags: adminshellio/aasx-server-blazor-for-demo-arm32:${{ steps.set-docker-tag.outputs.tag }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version =${{ env.VERSION_NUMBER }}"
- name: Build and publish AasxServerBlazor-arm64
uses: docker/build-push-action@v6
with:
push: true
load: true
file: ./src/docker/Dockerfile-AasxServerBlazor
platforms: linux/arm64
tags: adminshellio/aasx-server-blazor-for-demo-arm64:${{ steps.set-docker-tag.outputs.tag }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version =${{ env.VERSION_NUMBER }}"
- name: Build and publish AasxServerCore-arm32
uses: docker/build-push-action@v6
with:
push: true
load: true
file: ./src/docker/Dockerfile-AasxServerAspNetCore
platforms: linux/arm/v7
tags: adminshellio/aasx-server-aspnetcore-for-demo-arm32:${{ steps.set-docker-tag.outputs.tag }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version =${{ env.VERSION_NUMBER }}"
- name: Build and publish AasxServerCore-arm64
uses: docker/build-push-action@v6
with:
push: true
load: true
file: ./src/docker/Dockerfile-AasxServerAspNetCore
platforms: linux/arm64
tags: adminshellio/aasx-server-aspnetcore-for-demo-arm64:${{ steps.set-docker-tag.outputs.tag }}
github-token: ${{ secrets.GITHUB_TOKEN }}
labels: "version =${{ env.VERSION_NUMBER }}"