Files
eco_os/.gitea/workflows/release.yml

109 lines
4.2 KiB
YAML

name: Release
on:
push:
tags: ['v*']
jobs:
release:
if: github.ref_type == 'tag'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Deno
uses: denoland/setup-deno@v1
with:
deno-version: v2.x
- name: Install pnpm
run: npm install -g pnpm
- name: Get version from tag
id: version
run: |
VERSION=${GITHUB_REF#refs/tags/}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "version_number=${VERSION#v}" >> $GITHUB_OUTPUT
- name: Set version in package.json and version.ts
run: |
npm version ${{ steps.version.outputs.version_number }} --no-git-tag-version --allow-same-version
echo "export const VERSION = \"${{ steps.version.outputs.version_number }}\";" > ecoos_daemon/ts/version.ts
- name: Build daemon binary
run: pnpm run daemon:bundle
- name: Build ISO with Docker
run: |
cp ecoos_daemon/bundle/eco-daemon isobuild/config/includes.chroot/opt/eco/bin/
mkdir -p .nogit/iso
docker build -t ecoos-builder -f isobuild/Dockerfile .
docker run --rm --privileged -v $(pwd)/.nogit/iso:/output ecoos-builder
- name: Prepare release assets
run: |
VERSION="${{ steps.version.outputs.version }}"
mkdir -p dist
cp .nogit/iso/ecoos.iso "dist/ecoos-${VERSION}.iso"
cp ecoos_daemon/bundle/eco-daemon "dist/eco-daemon-${VERSION}"
cd dist && sha256sum * > SHA256SUMS.txt
ls -lh
- name: Delete existing release if exists
run: |
VERSION="${{ steps.version.outputs.version }}"
EXISTING=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases/tags/$VERSION" | jq -r '.id // empty')
if [ -n "$EXISTING" ]; then
echo "Deleting existing release $EXISTING"
curl -X DELETE -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases/$EXISTING"
sleep 2
fi
- name: Create Release and upload assets
run: |
VERSION="${{ steps.version.outputs.version }}"
# Create release
RELEASE_ID=$(curl -X POST -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/json" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases" \
-d "{
\"tag_name\": \"$VERSION\",
\"name\": \"EcoOS $VERSION\",
\"body\": \"## EcoOS $VERSION\n\n### Assets\n- **ecoos-${VERSION}.iso** - Full bootable ISO image\n- **eco-daemon-${VERSION}** - Daemon binary for in-place upgrades\n\n### Checksums\nSHA256 checksums in SHA256SUMS.txt\",
\"draft\": false,
\"prerelease\": false
}" | jq -r '.id')
echo "Created release with ID: $RELEASE_ID"
# Upload assets
for asset in dist/*; do
filename=$(basename "$asset")
echo "Uploading $filename..."
curl -X POST -s \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary "@$asset" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets?name=$filename"
done
- name: Cleanup old releases (keep 3 latest)
run: |
echo "Checking for old releases to clean up..."
RELEASES=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases" | \
jq -r 'sort_by(.created_at) | reverse | .[3:] | .[].id')
for id in $RELEASES; do
echo "Deleting old release $id"
curl -X DELETE -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"https://code.foss.global/api/v1/repos/${{ gitea.repository }}/releases/$id"
done
echo "Cleanup complete"