Auto Update TailwindCSS and Publish NuGet #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} | |