Skip to content

Publish custom version to custom feed #9

Publish custom version to custom feed

Publish custom version to custom feed #9

name: Build
on:
push:
branches:
- main
- ci
- release/*
jobs:
# Prime a single LFS cache and expose the exact key for the matrix
WarmLFS:
runs-on: ubuntu-latest
outputs:
lfs_key: ${{ steps.expose-key.outputs.lfs_key }}
steps:
- name: Git Config
shell: bash
run: |
git config --global core.autocrlf false
git config --global core.longpaths true
- name: Git Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
# Deterministic list of LFS object IDs, then compute a portable key:
# - `git lfs ls-files -l` lists all tracked LFS objects with their SHA-256
# - `awk '{print $1}'` extracts just the SHA field
# - `sort` sorts in byte order (hex hashes sort the same everywhere)
# This ensures the file content is identical regardless of OS or locale
- name: Git Create LFS id list
shell: bash
run: git lfs ls-files -l | awk '{print $1}' | sort > .lfs-assets-id
- name: Git Expose LFS cache key
id: expose-key
shell: bash
env:
LFS_KEY: lfs-${{ hashFiles('.lfs-assets-id') }}-v1
run: echo "lfs_key=$LFS_KEY" >> "$GITHUB_OUTPUT"
- name: Git Setup LFS Cache
uses: actions/cache@v4
with:
path: .git/lfs
key: ${{ steps.expose-key.outputs.lfs_key }}
- name: Git Pull LFS
shell: bash
run: git lfs pull
#
# Build:
# needs: WarmLFS
# strategy:
# matrix:
# options:
# - os: ubuntu-latest
# framework: net10.0
# sdk: 10.0.x
# sdk-preview: true
# runtime: -x64
# codecov: false
# - os: macos-26
# framework: net10.0
# sdk: 10.0.x
# sdk-preview: true
# runtime: -x64
# codecov: false
# - os: windows-latest
# framework: net10.0
# sdk: 10.0.x
# sdk-preview: true
# runtime: -x64
# codecov: false
# - os: ubuntu-22.04-arm
# framework: net10.0
# sdk: 10.0.x
# sdk-preview: true
# runtime: -x64
# codecov: false
#
# - os: ubuntu-latest
# framework: net8.0
# sdk: 8.0.x
# runtime: -x64
# codecov: false
# - os: macos-26
# framework: net8.0
# sdk: 8.0.x
# runtime: -x64
# codecov: false
# - os: windows-latest
# framework: net8.0
# sdk: 8.0.x
# runtime: -x64
# codecov: false
# - os: ubuntu-22.04-arm
# framework: net8.0
# sdk: 8.0.x
# runtime: -x64
# codecov: false
#
# runs-on: ${{ matrix.options.os }}
#
# steps:
# - name: Install libgdi+, which is required for tests running on ubuntu
# if: ${{ contains(matrix.options.os, 'ubuntu') }}
# run: |
# sudo apt-get update
# sudo apt-get -y install libgdiplus libgif-dev libglib2.0-dev libcairo2-dev libtiff-dev libexif-dev
#
# - name: Install libgdi+, which is required for tests running on macos
# if: ${{ contains(matrix.options.os, 'macos-26') }}
# run: |
# brew update
# brew install mono-libgdiplus
# # Create symlinks to make libgdiplus discoverable
# sudo mkdir -p /usr/local/lib
# sudo ln -sf $(brew --prefix)/lib/libgdiplus.dylib /usr/local/lib/libgdiplus.dylib
# # Verify installation
# ls -la $(brew --prefix)/lib/libgdiplus* || echo "libgdiplus not found in brew prefix"
# ls -la /usr/local/lib/libgdiplus* || echo "libgdiplus not found in /usr/local/lib"
#
# - name: Git Config
# shell: bash
# run: |
# git config --global core.autocrlf false
# git config --global core.longpaths true
#
# - name: Git Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0
# submodules: recursive
#
# # Use the warmed key from WarmLFS. Do not recompute or recreate .lfs-assets-id here.
# - name: Git Setup LFS Cache
# uses: actions/cache@v4
# with:
# path: .git/lfs
# key: ${{ needs.WarmLFS.outputs.lfs_key }}
#
# - name: Git Pull LFS
# shell: bash
# run: git lfs pull
#
# - name: NuGet Install
# uses: NuGet/setup-nuget@v2
#
# - name: NuGet Setup Cache
# uses: actions/cache@v4
# id: nuget-cache
# with:
# path: ~/.nuget
# key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/*.props', '**/*.targets') }}
# restore-keys: ${{ runner.os }}-nuget-
#
# - name: DotNet Setup
# if: ${{ matrix.options.sdk-preview != true }}
# uses: actions/setup-dotnet@v4
# with:
# dotnet-version: |
# 8.0.x
#
# - name: DotNet Setup Preview
# if: ${{ matrix.options.sdk-preview == true }}
# uses: actions/setup-dotnet@v4
# with:
# dotnet-version: |
# 10.0.x
#
# - name: DotNet Build
# if: ${{ matrix.options.sdk-preview != true }}
# shell: pwsh
# run: ./ci-build.ps1 "${{matrix.options.framework}}"
# env:
# SIXLABORS_TESTING: True
#
# - name: DotNet Build Preview
# if: ${{ matrix.options.sdk-preview == true }}
# shell: pwsh
# run: ./ci-build.ps1 "${{matrix.options.framework}}"
# env:
# SIXLABORS_TESTING_PREVIEW: True
#
# - name: DotNet Test
# if: ${{ matrix.options.sdk-preview != true }}
# shell: pwsh
# run: ./ci-test.ps1 "${{matrix.options.os}}" "${{matrix.options.framework}}" "${{matrix.options.runtime}}" "${{matrix.options.codecov}}"
# env:
# SIXLABORS_TESTING: True
# XUNIT_PATH: .\tests\ImageSharp.Tests # Required for xunit
#
# - name: DotNet Test Preview
# if: ${{ matrix.options.sdk-preview == true }}
# shell: pwsh
# run: ./ci-test.ps1 "${{matrix.options.os}}" "${{matrix.options.framework}}" "${{matrix.options.runtime}}" "${{matrix.options.codecov}}"
# env:
# SIXLABORS_TESTING_PREVIEW: True
# XUNIT_PATH: .\tests\ImageSharp.Tests # Required for xunit
#
# - name: Export Failed Output
# uses: actions/upload-artifact@v4
# if: failure()
# with:
# name: actual_output_${{ runner.os }}_${{ matrix.options.framework }}${{ matrix.options.runtime }}.zip
# path: tests/Images/ActualOutput/
Publish:
permissions:
id-token: write # Required for OIDC
contents: read
# needs: [Build]
runs-on: ubuntu-latest
if: (github.event_name == 'push')
steps:
- name: Git Config
shell: bash
run: |
git config --global core.autocrlf false
git config --global core.longpaths true
- name: Git Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: NuGet Install
uses: NuGet/setup-nuget@v2
- name: NuGet Setup Cache
uses: actions/cache@v4
id: nuget-cache
with:
path: ~/.nuget
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/*.props', '**/*.targets') }}
restore-keys: ${{ runner.os }}-nuget-
- name: Install Sleet
run: dotnet tool install -g sleet
- name: Compute Version
id: compute-version
shell: pwsh
run: |
$date = Get-Date -Format "yyyy.MM.dd"
$buildNumber = "${{ github.run_number }}"
$version = "$date-mc.$buildNumber"
echo "version=$version" >> $env:GITHUB_OUTPUT
echo "Computed version: $version"
- name: DotNet Pack
shell: pwsh
run: ./ci-pack.ps1 -version "${{ steps.compute-version.outputs.version }}"
- name: Azure Login
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Publish Internal
shell: pwsh
run: |
sleet push ./artifacts --config sleet.json artifacts