Skip to content

Auto Update TailwindCSS and Publish NuGet #3

Auto Update TailwindCSS and Publish NuGet

Auto Update TailwindCSS and Publish NuGet #3

name: Auto Update TailwindCSS and Publish NuGet
on:
schedule:
# Run every day at 00:00 UTC
- cron: '0 0 * * *'
workflow_dispatch:
jobs:
check-and-update:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.x"
- name: Get latest TailwindCSS version
id: get_tailwind_version
run: |
set -e
LATEST_TAILWIND_VERSION=$(curl -s https://api.github.com/repos/tailwindlabs/tailwindcss/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$LATEST_TAILWIND_VERSION" ]; then
echo "Error: Failed to fetch latest TailwindCSS version from GitHub API." >&2
exit 1
fi
echo "Latest TailwindCSS version: $LATEST_TAILWIND_VERSION"
echo "TAILWINDCSS_VERSION=$LATEST_TAILWIND_VERSION" >> $GITHUB_ENV
echo "TAILWINDCSS_VERSION_CLEAN=${LATEST_TAILWIND_VERSION//v/}" >> $GITHUB_ENV
- name: Get current version from csproj
id: get_current_version
run: |
set -e
CURRENT_VERSION=$(grep -oP '<Version>\K[^<]+' ./DotnetDevKR.TailwindCSS/DotnetDevKR.TailwindCSS.csproj)
if [ -z "$CURRENT_VERSION" ]; then
echo "Error: Failed to extract current version from csproj file." >&2
exit 1
fi
echo "Current version: $CURRENT_VERSION"
echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV
# Extract library version and TailwindCSS version
LIB_VERSION=$(echo $CURRENT_VERSION | cut -d'+' -f1)
CURRENT_TAILWIND_VERSION=$(echo $CURRENT_VERSION | cut -d'+' -f2 | sed 's/v//')
if [ -z "$LIB_VERSION" ] || [ -z "$CURRENT_TAILWIND_VERSION" ]; then
echo "Error: Malformed version string in csproj file." >&2
exit 1
fi
echo "Current library version: $LIB_VERSION"
echo "Current TailwindCSS version: $CURRENT_TAILWIND_VERSION"
echo "LIB_VERSION=$LIB_VERSION" >> $GITHUB_ENV
echo "CURRENT_TAILWIND_VERSION=$CURRENT_TAILWIND_VERSION" >> $GITHUB_ENV
- name: Check if update is needed
id: check_update
run: |
if [ "$CURRENT_TAILWIND_VERSION" != "$TAILWINDCSS_VERSION_CLEAN" ]; then
echo "Update needed: $CURRENT_TAILWIND_VERSION -> $TAILWINDCSS_VERSION_CLEAN"
echo "UPDATE_NEEDED=true" >> $GITHUB_ENV
# Increment patch version (0.1.0 -> 0.1.1)
IFS='.' read -ra VERSION_PARTS <<< "$LIB_VERSION"
MAJOR=${VERSION_PARTS[0]}
MINOR=${VERSION_PARTS[1]}
PATCH=${VERSION_PARTS[2]}
# NEW_PATCH=$((PATCH + 1))
NEW_PATCH=$((PATCH))
NEW_LIB_VERSION="$MAJOR.$MINOR.$NEW_PATCH"
echo "New library version: $NEW_LIB_VERSION"
echo "NEW_LIB_VERSION=$NEW_LIB_VERSION" >> $GITHUB_ENV
echo "NEW_VERSION=$NEW_LIB_VERSION+v$TAILWINDCSS_VERSION_CLEAN" >> $GITHUB_ENV
else
echo "No update needed. Current version is already up to date."
echo "UPDATE_NEEDED=false" >> $GITHUB_ENV
fi
- name: Update version in csproj
if: env.UPDATE_NEEDED == 'true'
run: |
sed -i "s|<Version>.*</Version>|<Version>${NEW_VERSION}</Version>|" ./DotnetDevKR.TailwindCSS/DotnetDevKR.TailwindCSS.csproj
echo "Updated csproj to version: $NEW_VERSION"
- name: Update version in install.sh
if: env.UPDATE_NEEDED == 'true'
run: |
sed -i "s|VERSION=\${1:-\"v[^\"]*\"}|VERSION=\${1:-\"${TAILWINDCSS_VERSION}\"}|" ./DotnetDevKR.TailwindCSS/runtime/install.sh
echo "Updated install.sh to TailwindCSS version: $TAILWINDCSS_VERSION"
- name: Download TailwindCSS executables
if: env.UPDATE_NEEDED == 'true'
run: |
chmod +x ./DotnetDevKR.TailwindCSS/runtime/install.sh
./DotnetDevKR.TailwindCSS/runtime/install.sh ${{ env.TAILWINDCSS_VERSION }}
- name: Restore dependencies
if: env.UPDATE_NEEDED == 'true'
run: dotnet restore DotnetDevKR.TailwindCSS.sln
- name: Build
if: env.UPDATE_NEEDED == 'true'
run: dotnet build DotnetDevKR.TailwindCSS.sln --configuration Release --no-restore
- name: Pack
if: env.UPDATE_NEEDED == 'true'
run: |
dotnet pack ./DotnetDevKR.TailwindCSS/DotnetDevKR.TailwindCSS.csproj --configuration Release \
--no-build --no-restore \
--output ./artifacts \
/p:Version=${{ env.NEW_VERSION }}
- name: Push changes and tags
if: env.UPDATE_NEEDED == 'true'
run: |
git push origin ${{ github.ref_name }}
git push origin "v${{ env.NEW_LIB_VERSION }}"
- name: Publish to NuGet.org
if: env.UPDATE_NEEDED == 'true'
run: |
dotnet nuget push ./artifacts/*.nupkg \
--source https://api.nuget.org/v3/index.json \
--api-key ${{ secrets.NUGET_API_KEY }} \
--skip-duplicate
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
- name: Publish to GitHub Packages
if: env.UPDATE_NEEDED == 'true'
run: |
dotnet nuget push ./artifacts/*.nupkg \
--source https://nuget.pkg.github.com/dotnetdev-kr/index.json \
--api-key ${{ secrets.GITHUB_TOKEN }} \
--skip-duplicate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitHub Release
if: env.UPDATE_NEEDED == 'true'
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ env.NEW_LIB_VERSION }}
name: Release v${{ env.NEW_LIB_VERSION }}
body: |
## Updates
- Updated TailwindCSS from v${{ env.CURRENT_TAILWIND_VERSION }} to ${{ env.TAILWINDCSS_VERSION }}
- Package version: ${{ env.NEW_VERSION }}
## Installation
```bash
dotnet add package DotnetDevKR.TailwindCSS --version ${{ env.NEW_VERSION }}
```
files: ./artifacts/*.nupkg
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}