Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds linux/arm64 docker image, bumps to net8, reworks release process #16

Merged
merged 17 commits into from
Nov 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Ignore build directories
bin/
obj/

# Ignore some project files
.git/
.vs/
8 changes: 2 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,14 @@ jobs:
runs-on: windows-latest
strategy:
matrix:
dotnet-version: ["7.0.x"]
dotnet-version: ["8.0.x"]

steps:
- uses: actions/checkout@v4
- name: Setup .NET Core SDK ${{ matrix.dotnet-version }}
uses: actions/setup-dotnet@v4.0.1
uses: actions/setup-dotnet@v4.1.0
with:
dotnet-version: ${{ matrix.dotnet-version }}
# - name: Validate version consistency
# run: bash validate-version-consistency.sh
# working-directory: ./Material/Scripts
# shell: bash
- name: Install dependencies
run: dotnet restore
- name: Build
Expand Down
26 changes: 0 additions & 26 deletions .github/workflows/publish.yml

This file was deleted.

93 changes: 93 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: publish

on:
workflow_dispatch:
inputs:
VERSION:
description: "The version to release (e.g. 1.0.0)"
required: true

jobs:
release:
runs-on: ubuntu-latest
env:
VERSION: ${{ inputs.VERSION }}
GH_TOKEN: ${{ github.token }}
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
permissions:
contents: write
steps:
- name: configure git with the bot credentials
run: |
mkdir -p ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
ssh-agent -a $SSH_AUTH_SOCK > /dev/null
ssh-add - <<< "${{ secrets.BOT_SSH_KEY }}"

echo "${{ secrets.BOT_SIGNING_KEY }}" > ~/.ssh/signing.key
chmod 600 ~/.ssh/signing.key

git config --global user.name "Merschbotmann"
git config --global user.email "bot.merschformann@gmail.com"
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/signing.key

git clone git@github.com:merschformann/sardine-can.git

cd sardine-can
git checkout ${{ github.ref_name }}

git rev-parse --short HEAD

- name: bump version in project
run: |
python Material/Scripts/release.py --version $VERSION
working-directory: ./sardine-can

- name: commit version bump
run: |
git commit -am "Bumping version to $VERSION"
git push origin ${{ github.ref_name }}
working-directory: ./sardine-can

- name: push release tag
run: |
git tag $VERSION
git push origin $VERSION
working-directory: ./sardine-can

- name: create release
run: |
gh release create $VERSION \
--verify-tag \
--generate-notes \
--title $VERSION
working-directory: ./sardine-can

docker-image:
runs-on: ubuntu-24.04
needs: release

steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.VERSION }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Get version
run: |
echo "VERSION=$(cat VERSION.txt)" >> $GITHUB_ENV

- name: Build the SardineCan Docker image
run: |
echo "Building SardineCan docker in ${{ env.VERSION }}"
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
export LATEST_TAG="ghcr.io/merschformann/sardinecan:latest"
export VERSION_TAG="ghcr.io/merschformann/sardinecan:${{ env.VERSION }}"
docker buildx build --platform linux/amd64,linux/arm64 --push -t $LATEST_TAG -t $VERSION_TAG -f Dockerfile ..
working-directory: ./SC.Service
90 changes: 90 additions & 0 deletions Material/Scripts/release.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import argparse
import glob
import os
import re
import xml.etree.ElementTree as ET

VERSION_FILE = os.path.join(os.path.dirname(__file__), "..", "..", "VERSION.txt")


def parse_args() -> argparse.Namespace:
"""
Parse command line arguments.
"""
parser = argparse.ArgumentParser(description="Bump the version of the project.")
parser.add_argument("--version", required=True, help="The version to bump to.")
return parser.parse_args()


def check_version(version: str) -> bool:
"""
Check whether a given version is in expected format and actually newer than the
current version.
"""
if not re.match(r"^\d+\.\d+\.\d+$", version):
raise Exception(f"Version {version} is not in the format x.y.z")

with open(VERSION_FILE, "r") as f:
current_version = f.read().strip()

version = version.strip("v")
current_version = current_version.strip("v")

def parse_version(version: str):
return tuple(map(int, version.split(".")))

if parse_version(version) <= parse_version(current_version):
raise Exception(
f"New version {version} is not newer than current version {current_version}"
)


def bump_version_csproj(csproj_file: str, version: str) -> None:
"""
Bump the version of a csproj file.
"""
try:
tree = ET.parse(csproj_file)
root = tree.getroot()

bumped = False
for elem in root.iter():
if elem.tag == "Version":
elem.text = version
bumped = True

if not bumped:
raise Exception("No version element found")

tree.write(csproj_file)
except Exception as e:
print(f"Error bumping version in {csproj_file}: {e}")


def bump_version_main(version: str) -> None:
"""
Bump the main version file.
"""
with open(VERSION_FILE, "w") as f:
f.write(version)


def main() -> None:
args = parse_args()
version = args.version

check_version(version)

csproj_files = glob.glob(
os.path.join(os.path.dirname(__file__), "..", "..", "**", "*.csproj"),
recursive=True,
)
for csproj_file in csproj_files:
if "Test" in csproj_file:
continue
bump_version_csproj(csproj_file, version)
bump_version_main(version)


if __name__ == "__main__":
main()
28 changes: 0 additions & 28 deletions Material/Scripts/validate-version-consistency.sh

This file was deleted.

4 changes: 2 additions & 2 deletions SC.CLI/Executor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -298,9 +298,9 @@ private static void LogConfigDetails(Configuration config, Action<string> logger
else
{
if (toStringMethod != null)
value = toStringMethod.Invoke(field.GetValue(config), new object[] { CultureInfo.InvariantCulture }).ToString();
value = toStringMethod.Invoke(field.GetValue(config), new object[] { CultureInfo.InvariantCulture })?.ToString();
else
value = field.GetValue(config).ToString();
value = field.GetValue(config)?.ToString();
}
}
// Output it
Expand Down
5 changes: 3 additions & 2 deletions SC.CLI/SC.CLI.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<InvariantGlobalization>true</InvariantGlobalization>
Expand Down
2 changes: 1 addition & 1 deletion SC.DataPreparation/SC.DataPreparation.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion SC.GUI/SC.GUI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<TargetFramework>net8.0-windows</TargetFramework>
<EnableWindowsTargeting>true</EnableWindowsTargeting>
<UseWPF>true</UseWPF>
<ApplicationIcon>Logo.ico</ApplicationIcon>
Expand Down
2 changes: 1 addition & 1 deletion SC.Heuristics/SC.Heuristics.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion SC.Linear/SC.Linear.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion SC.ObjectModel/SC.ObjectModel.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion SC.Playground/SC.Playground.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
</PropertyGroup>
Expand Down
18 changes: 5 additions & 13 deletions SC.Service/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["SC.Service/SC.Service.csproj", "SC.Service/"]
RUN dotnet restore "SC.Service/SC.Service.csproj"
COPY . .
RUN dotnet restore "SC.Service/SC.Service.csproj"
WORKDIR "/src/SC.Service"
RUN dotnet build "SC.Service.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "SC.Service.csproj" -c Release -o /app/publish

FROM base AS final
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
LABEL org.opencontainers.image.source="https://github.com/merschformann/sardine-can"
WORKDIR /app
COPY --from=publish /app/publish .
EXPOSE 80
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "SC.Service.dll"]
2 changes: 1 addition & 1 deletion SC.Service/SC.Service.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<Version>1.0.6</Version>
<SelfContained>true</SelfContained>
Expand Down
2 changes: 1 addition & 1 deletion SC.Tests/SC.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand Down
Loading
Loading