name: "Release"
on:
push:
tags:
- "v*"
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract version from tag
id: version
run: |
TAG="${GITHUB_REF_NAME}"
VERSION="${TAG#v}"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "10.0.x"
- name: Update version in .csproj
run: |
CSPROJ="Jellyfin.Plugin.ShareLinks/Jellyfin.Plugin.ShareLinks.csproj"
VERSION="${{ steps.version.outputs.version }}"
sed -i "s|.*|${VERSION}|" "$CSPROJ"
sed -i "s|.*|${VERSION}|" "$CSPROJ"
sed -i "s|.*|${VERSION}|" "$CSPROJ"
grep -E "Version>" "$CSPROJ"
- name: Build
run: dotnet build Jellyfin.Plugin.ShareLinks -c Release
- name: Compute build timestamp
id: timestamp
run: |
TS=$(date -u +"%Y-%m-%dT%H:%M:%S.%6N0Z")
echo "timestamp=${TS}" >> "$GITHUB_OUTPUT"
- name: Update meta.json
run: |
META="Jellyfin.Plugin.ShareLinks/meta.json"
VERSION="${{ steps.version.outputs.version }}"
TIMESTAMP="${{ steps.timestamp.outputs.timestamp }}"
jq --arg v "$VERSION" --arg ts "$TIMESTAMP" \
'.version = $v | .timestamp = $ts' \
"$META" > "${META}.tmp"
mv "${META}.tmp" "$META"
cat "$META"
- name: Package release archive
run: |
VERSION="${{ steps.version.outputs.version }}"
OUT="Jellyfin.Plugin.ShareLinks/bin/Release/net9.0"
STAGING="staging"
mkdir -p "$STAGING"
cp "${OUT}/Jellyfin.Plugin.ShareLinks.dll" "$STAGING/"
cp "Jellyfin.Plugin.ShareLinks/meta.json" "$STAGING/"
cd "$STAGING"
zip -r "../sharelinks_${VERSION}.zip" .
cd ..
ls -la sharelinks_${VERSION}.zip
- name: Compute checksum
id: checksum
run: |
VERSION="${{ steps.version.outputs.version }}"
CHECKSUM=$(md5sum "sharelinks_${VERSION}.zip" | awk '{print $1}')
echo "checksum=${CHECKSUM}" >> "$GITHUB_OUTPUT"
echo "MD5: ${CHECKSUM}"
- name: Update manifest.json
run: |
MANIFEST="manifest.json"
VERSION="${{ steps.version.outputs.version }}"
TIMESTAMP="${{ steps.timestamp.outputs.timestamp }}"
CHECKSUM="${{ steps.checksum.outputs.checksum }}"
jq \
--arg version "$VERSION" \
--arg timestamp "$TIMESTAMP" \
--arg checksum "$CHECKSUM" \
'
.[0].versions |= (
if any(.[]; .version == $version) then
map(
if .version == $version then
if has("changelog") | not then
.changelog = ""
else
.
end
| if has("targetAbi") then
.targetAbi = "10.11.0.0"
else
.
end
| if has("sourceUrl") then
.sourceUrl = "https://git.celjim.fr/public/jellyfin-plugin-sharelinks/releases/download/v\($version)/sharelinks_\($version).zip"
else
.
end
| if has("checksum") then
.checksum = $checksum
else
.
end
| if has("timestamp") then
.timestamp = $timestamp
else
.
end
else
.
end
)
else
[{
"version": $version,
"changelog": "",
"targetAbi": "10.11.0.0",
"sourceUrl": "https://git.celjim.fr/public/jellyfin-plugin-sharelinks/releases/download/v\($version)/sharelinks_\($version).zip",
"checksum": $checksum,
"timestamp": $timestamp
}] + .
end
)
' "$MANIFEST" > "${MANIFEST}.tmp"
mv "${MANIFEST}.tmp" "$MANIFEST"
cat "$MANIFEST"
- name: Commit and push manifest
run: |
git config user.name "Gitea Actions"
git config user.email "actions@celjim.fr"
git add manifest.json Jellyfin.Plugin.ShareLinks/meta.json Jellyfin.Plugin.ShareLinks/Jellyfin.Plugin.ShareLinks.csproj
if git diff --cached --quiet; then
echo "No changes to commit"
exit 0
fi
git commit -m "Update manifest/meta for v${{ steps.version.outputs.version }}"
git push origin HEAD:${{ github.event.repository.default_branch }}
- name: Publish Gitea release
uses: https://gitea.com/actions/gitea-release-action@main
with:
files: |-
sharelinks_${{ steps.version.outputs.version }}.zip
token: "${{ secrets.RELEASE_TOKEN }}"