From f331ba2b613b444c496ceec3a6d89767b1781a22 Mon Sep 17 00:00:00 2001 From: Hein Date: Wed, 8 Apr 2026 20:59:11 +0200 Subject: [PATCH] chore(release): update package version and add packaging files for AUR, Debian, and RPM --- .claude/commands/build.md | 5 - .claude/commands/coverage.md | 9 - .claude/commands/lint.md | 10 -- .claude/commands/test.md | 5 - .gitea/workflows/release.yml | 327 ++++++++++++++++++++++++++++++++++ .github/workflows/release.yml | 117 ------------ Makefile | 39 ++-- linux/arch/PKGBUILD | 35 ++++ linux/centos/relspec.spec | 43 +++++ linux/debian/control | 11 ++ 10 files changed, 431 insertions(+), 170 deletions(-) delete mode 100644 .claude/commands/build.md delete mode 100644 .claude/commands/coverage.md delete mode 100644 .claude/commands/lint.md delete mode 100644 .claude/commands/test.md create mode 100644 .gitea/workflows/release.yml delete mode 100644 .github/workflows/release.yml create mode 100644 linux/arch/PKGBUILD create mode 100644 linux/centos/relspec.spec create mode 100644 linux/debian/control diff --git a/.claude/commands/build.md b/.claude/commands/build.md deleted file mode 100644 index 0b3b9a6..0000000 --- a/.claude/commands/build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -description: Build the RelSpec binary ---- - -Build the RelSpec project by running `make build`. Report the build status and any errors encountered. diff --git a/.claude/commands/coverage.md b/.claude/commands/coverage.md deleted file mode 100644 index 79e11a8..0000000 --- a/.claude/commands/coverage.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -description: Generate test coverage report ---- - -Generate and display test coverage for RelSpec: -1. Run `go test -cover ./...` to get coverage percentage -2. If detailed coverage is needed, run `go test -coverprofile=coverage.out ./...` and then `go tool cover -html=coverage.out` to generate HTML report - -Show coverage statistics and identify areas needing more tests. diff --git a/.claude/commands/lint.md b/.claude/commands/lint.md deleted file mode 100644 index 0992c98..0000000 --- a/.claude/commands/lint.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -description: Run Go linters on the codebase ---- - -Run linting tools on the RelSpec codebase: -1. First run `gofmt -l .` to check formatting -2. If golangci-lint is available, run `golangci-lint run ./...` -3. Run `go vet ./...` to check for suspicious constructs - -Report any issues found and suggest fixes if needed. diff --git a/.claude/commands/test.md b/.claude/commands/test.md deleted file mode 100644 index 8375a8e..0000000 --- a/.claude/commands/test.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -description: Run all tests for the RelSpec project ---- - -Run `go test ./...` to execute all unit tests in the project. Show a summary of the results and highlight any failures. diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..2d56e9b --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,327 @@ +name: Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + tag: + description: 'Tag to release (e.g. v1.2.3)' + required: true + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Test + run: go test ./... + + - name: Lint + run: go vet ./... + + release: + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Build release binaries + run: | + VERSION="${{ github.event.inputs.tag || github.ref_name }}" + for target in "linux/amd64" "linux/arm64" "darwin/amd64" "darwin/arm64" "windows/amd64"; do + GOOS="${target%/*}" + GOARCH="${target#*/}" + EXT="" + [ "$GOOS" = "windows" ] && EXT=".exe" + NAME="relspec-${GOOS}-${GOARCH}${EXT}" + GOOS="$GOOS" GOARCH="$GOARCH" go build \ + -trimpath \ + -ldflags "-X git.warky.dev/wdevs/relspecgo/cmd/relspec.version=${VERSION}" \ + -o "$NAME" ./cmd/relspec + echo "Built $NAME" + done + + - name: Create release and upload assets + run: | + TAG="${{ github.event.inputs.tag || github.ref_name }}" + API="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases" + + # Collect commits since the previous tag (or last 20 if no prior tag) + PREV_TAG=$(git tag --sort=-version:refname | grep -v "^${TAG}$" | head -1) + if [ -n "$PREV_TAG" ]; then + RANGE="${PREV_TAG}..${TAG}" + else + RANGE="HEAD~20..HEAD" + fi + NOTES=$(git log "$RANGE" --pretty=format:"- %s" --no-merges) + BODY="## What's changed"$'\n'"${NOTES}" + + # Escape for JSON + BODY_JSON=$(printf '%s' "$BODY" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))') + + RELEASE=$(curl -s -X POST "$API" \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"body\":${BODY_JSON}}") + + UPLOAD_URL=$(echo "$RELEASE" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4 | sed 's/{[^}]*}//') + if [ -z "$UPLOAD_URL" ]; then + echo "Failed to create release: $RELEASE" + exit 1 + fi + + for f in relspec-*; do + echo "Uploading $f..." + curl -s -X POST "${UPLOAD_URL}?name=${f}" \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@${f}" > /dev/null + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + pkg-aur: + needs: release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Publish to AUR + env: + AUR_SSH_KEY: ${{ secrets.AUR_SSH_KEY }} + run: | + set -euo pipefail + + VERSION="${{ github.event.inputs.tag || github.ref_name }}" + PKGVER="${VERSION#v}" + AUR_KEY_PATH="$HOME/.ssh/aur" + AUR_KNOWN_HOSTS="$HOME/.ssh/known_hosts" + + # Setup SSH for AUR + mkdir -p ~/.ssh + chmod 700 ~/.ssh + + if [ -z "${AUR_SSH_KEY:-}" ]; then + echo "AUR_SSH_KEY is empty" + exit 1 + fi + + # Support raw multiline keys, escaped \\n secrets, or base64-encoded keys. + CLEAN_AUR_SSH_KEY="$(printf '%s' "$AUR_SSH_KEY" | tr -d '\r')" + if printf '%s' "$CLEAN_AUR_SSH_KEY" | grep -q "^-----BEGIN .*PRIVATE KEY-----$"; then + printf '%s\n' "$CLEAN_AUR_SSH_KEY" > "$AUR_KEY_PATH" + elif printf '%s' "$CLEAN_AUR_SSH_KEY" | grep -q '\\n'; then + printf '%b\n' "$CLEAN_AUR_SSH_KEY" > "$AUR_KEY_PATH" + else + if printf '%s' "$CLEAN_AUR_SSH_KEY" | tr -d '[:space:]' | base64 --decode > "$AUR_KEY_PATH" 2>/dev/null; then + : + else + printf '%s\n' "$CLEAN_AUR_SSH_KEY" > "$AUR_KEY_PATH" + fi + fi + chmod 600 "$AUR_KEY_PATH" + + if ! ssh-keygen -y -f "$AUR_KEY_PATH" >/dev/null 2>&1; then + echo "AUR_SSH_KEY is not a valid private key." + echo "Store it as a raw private key, an escaped private key with \\n, or a base64-encoded private key." + exit 1 + fi + + ssh-keyscan -t rsa,ed25519 aur.archlinux.org >> "$AUR_KNOWN_HOSTS" + chmod 644 "$AUR_KNOWN_HOSTS" + + # Clone AUR repo + GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=$AUR_KNOWN_HOSTS -i $AUR_KEY_PATH" \ + git clone ssh://aur@aur.archlinux.org/relspec.git aur-repo + + CURRENT_PKGVER=$(awk -F= '/^pkgver=/ {print $2; exit}' aur-repo/PKGBUILD | tr -d "[:space:]") + CURRENT_PKGREL=$(awk -F= '/^pkgrel=/ {print $2; exit}' aur-repo/PKGBUILD | tr -d "[:space:]") + + if [ "$CURRENT_PKGVER" = "$PKGVER" ]; then + case "$CURRENT_PKGREL" in + ''|*[!0-9]*) + echo "Unsupported pkgrel in AUR repo: ${CURRENT_PKGREL}" + exit 1 + ;; + *) + PKGREL=$((CURRENT_PKGREL + 1)) + ;; + esac + else + PKGREL=1 + fi + + echo "Publishing AUR package version ${PKGVER}-${PKGREL}" + + # Compute SHA256 of the source archive from the same URL the PKGBUILD will download. + SHA=$(curl -fsSL "https://git.warky.dev/wdevs/relspecgo/archive/v${PKGVER}.zip" | sha256sum | cut -d' ' -f1) + + # Update PKGBUILD — keep remote source URL, bump version/checksum, and increment pkgrel for same-version rebuilds. + sed -e "s/^pkgver=.*/pkgver=${PKGVER}/" \ + -e "s/^pkgrel=.*/pkgrel=${PKGREL}/" \ + -e "s/^sha256sums=.*/sha256sums=('${SHA}')/" \ + linux/arch/PKGBUILD > aur-repo/PKGBUILD + + # Generate .SRCINFO inside an Arch container (docker cp avoids DinD volume mount issues) + CID=$(docker run -d archlinux:latest sleep infinity) + docker cp aur-repo/PKGBUILD $CID:/build/PKGBUILD || (docker exec $CID mkdir -p /build && docker cp aur-repo/PKGBUILD $CID:/build/PKGBUILD) + docker exec $CID bash -c " + pacman -Sy --noconfirm base-devel && + useradd -m builder && + chown -R builder:builder /build && + runuser -u builder -- bash -c 'cd /build && makepkg --printsrcinfo > .SRCINFO' + " + docker cp $CID:/build/.SRCINFO aur-repo/.SRCINFO + docker rm -f $CID + + # Commit and push to AUR master + cd aur-repo + git config user.email "hein@warky.dev" + git config user.name "Hein" + git add PKGBUILD .SRCINFO + git commit -m "Update to v${PKGVER}-${PKGREL}" + GIT_SSH_COMMAND="ssh -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=$AUR_KNOWN_HOSTS -i $AUR_KEY_PATH" \ + git push origin HEAD:master + + pkg-deb: + needs: release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: Build Debian packages + run: | + VERSION="${{ github.event.inputs.tag || github.ref_name }}" + PKGVER="${VERSION#v}" + + for GOARCH in amd64 arm64; do + GOOS=linux GOARCH=$GOARCH go build \ + -trimpath \ + -ldflags "-X git.warky.dev/wdevs/relspecgo/cmd/relspec.version=${PKGVER}" \ + -o relspec ./cmd/relspec + + PKGDIR="relspec_${PKGVER}_${GOARCH}" + mkdir -p "${PKGDIR}/DEBIAN" + mkdir -p "${PKGDIR}/usr/bin" + + install -m755 relspec "${PKGDIR}/usr/bin/relspec" + + sed -e "s/VERSION/${PKGVER}/" \ + -e "s/ARCH/${GOARCH}/" \ + linux/debian/control > "${PKGDIR}/DEBIAN/control" + + dpkg-deb --build --root-owner-group "${PKGDIR}" + echo "Built ${PKGDIR}.deb" + done + + - name: Upload to release + run: | + TAG="${{ github.event.inputs.tag || github.ref_name }}" + RELEASE=$(curl -s "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" \ + -H "Authorization: token ${GITHUB_TOKEN}") + UPLOAD_URL=$(echo "$RELEASE" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4 | sed 's/{[^}]*}//') + for f in *.deb; do + FNAME=$(basename "$f") + echo "Uploading $FNAME..." + curl -s -X POST "${UPLOAD_URL}?name=${FNAME}" \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@${f}" > /dev/null + done + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + pkg-rpm: + needs: release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Build RPM + run: | + set -euo pipefail + + VERSION="${{ github.event.inputs.tag || github.ref_name }}" + PKGVER="${VERSION#v}" + GO_VER="$(awk '/^go / { print $2; exit }' go.mod)" + + if [ -z "${GO_VER}" ]; then + echo "Failed to determine Go version from go.mod" + exit 1 + fi + + # Source tarball — prefix=relspec-VERSION/ matches RPM %autosetup convention + git archive --format=tar.gz --prefix=relspec-${PKGVER}/ HEAD \ + > relspec-${PKGVER}.tar.gz + + # Patch spec version + sed -i "s/^Version:.*/Version: ${PKGVER}/" linux/centos/relspec.spec + + mkdir -p linux/centos/out + CID=$(docker create \ + -e GO_VER="${GO_VER}" \ + -e PKGVER="${PKGVER}" \ + -w /build \ + rockylinux:9 \ + bash -lc " + set -euo pipefail + dnf install -y rpm-build git && + curl -fsSL https://go.dev/dl/go\${GO_VER}.linux-amd64.tar.gz | tar -C /usr/local -xz && + export PATH=\$PATH:/usr/local/go/bin && + mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} && + cp relspec-${PKGVER}.tar.gz ~/rpmbuild/SOURCES/ && + cp linux/centos/relspec.spec ~/rpmbuild/SPECS/ && + rpmbuild --nodeps -ba ~/rpmbuild/SPECS/relspec.spec + ") + + cleanup() { + docker rm -f "$CID" >/dev/null 2>&1 || true + } + trap cleanup EXIT + + docker cp relspec-${PKGVER}.tar.gz "$CID:/build/relspec-${PKGVER}.tar.gz" + docker cp linux "$CID:/build/linux" + + docker start -a "$CID" + docker cp "$CID:/root/rpmbuild/RPMS/." linux/centos/out/ + + trap - EXIT + cleanup + + - name: Upload to release + run: | + TAG="${{ github.event.inputs.tag || github.ref_name }}" + RELEASE=$(curl -s "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/releases/tags/${TAG}" \ + -H "Authorization: token ${GITHUB_TOKEN}") + UPLOAD_URL=$(echo "$RELEASE" | grep -o '"upload_url":"[^"]*"' | cut -d'"' -f4 | sed 's/{[^}]*}//') + while IFS= read -r f; do + FNAME=$(basename "$f") + echo "Uploading $FNAME..." + curl -s -X POST "${UPLOAD_URL}?name=${FNAME}" \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@${f}" > /dev/null + done < <(find linux/centos/out -name "*.rpm") + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 8cccf07..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,117 +0,0 @@ -name: Release -run-name: "Making Release" -on: - push: - tags: - - 'v*.*.*' - -jobs: - build-and-release: - name: Build and Release - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: '1.25' - - - name: Get version from tag - id: get_version - run: | - echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - echo "BUILD_DATE=$(date -u '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_OUTPUT - echo "Version: ${GITHUB_REF#refs/tags/}" - - - name: Build binaries for multiple platforms - run: | - mkdir -p dist - - # Linux AMD64 - GOOS=linux GOARCH=amd64 go build -o dist/relspec-linux-amd64 -ldflags "-X 'main.version=${{ steps.get_version.outputs.VERSION }}' -X 'main.buildDate=${{ steps.get_version.outputs.BUILD_DATE }}'" ./cmd/relspec - - # Linux ARM64 - GOOS=linux GOARCH=arm64 go build -o dist/relspec-linux-arm64 -ldflags "-X 'main.version=${{ steps.get_version.outputs.VERSION }}' -X 'main.buildDate=${{ steps.get_version.outputs.BUILD_DATE }}'" ./cmd/relspec - - # macOS AMD64 - GOOS=darwin GOARCH=amd64 go build -o dist/relspec-darwin-amd64 -ldflags "-X 'main.version=${{ steps.get_version.outputs.VERSION }}' -X 'main.buildDate=${{ steps.get_version.outputs.BUILD_DATE }}'" ./cmd/relspec - - # macOS ARM64 (Apple Silicon) - GOOS=darwin GOARCH=arm64 go build -o dist/relspec-darwin-arm64 -ldflags "-X 'main.version=${{ steps.get_version.outputs.VERSION }}' -X 'main.buildDate=${{ steps.get_version.outputs.BUILD_DATE }}'" ./cmd/relspec - - # Windows AMD64 - GOOS=windows GOARCH=amd64 go build -o dist/relspec-windows-amd64.exe -ldflags "-X 'main.version=${{ steps.get_version.outputs.VERSION }}' -X 'main.buildDate=${{ steps.get_version.outputs.BUILD_DATE }}'" ./cmd/relspec - - # Create checksums - cd dist - sha256sum * > checksums.txt - cd .. - - - name: Generate release notes - id: release_notes - run: | - # Get the previous tag - previous_tag=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") - - if [ -z "$previous_tag" ]; then - # No previous tag, get all commits - commits=$(git log --pretty=format:"- %s (%h)" --no-merges) - else - # Get commits since the previous tag - commits=$(git log "${previous_tag}..HEAD" --pretty=format:"- %s (%h)" --no-merges) - fi - - # Create release notes - cat > release_notes.md << EOF - # Release ${{ steps.get_version.outputs.VERSION }} - - ## Changes - - ${commits} - - ## Installation - - Download the appropriate binary for your platform: - - - **Linux (AMD64)**: \`relspec-linux-amd64\` - - **Linux (ARM64)**: \`relspec-linux-arm64\` - - **macOS (Intel)**: \`relspec-darwin-amd64\` - - **macOS (Apple Silicon)**: \`relspec-darwin-arm64\` - - **Windows (AMD64)**: \`relspec-windows-amd64.exe\` - - Make the binary executable (Linux/macOS): - \`\`\`bash - chmod +x relspec-* - \`\`\` - - Verify the download with the provided checksums. - EOF - - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - body_path: release_notes.md - files: | - dist/relspec-linux-amd64 - dist/relspec-linux-arm64 - dist/relspec-darwin-amd64 - dist/relspec-darwin-arm64 - dist/relspec-windows-amd64.exe - dist/checksums.txt - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Summary - run: | - echo "Release ${{ steps.get_version.outputs.VERSION }} created successfully!" - echo "Binaries built for:" - echo " - Linux (amd64, arm64)" - echo " - macOS (amd64, arm64)" - echo " - Windows (amd64)" diff --git a/Makefile b/Makefile index 29dd9e7..34f3f77 100644 --- a/Makefile +++ b/Makefile @@ -204,30 +204,21 @@ release: ## Create and push a new release tag (auto-increments patch version) git push origin "$$version"; \ echo "Tag $$version created and pushed to remote repository." -release-version: ## Create and push a release with specific version (use: make release-version VERSION=v1.2.3) - @if [ -z "$(VERSION)" ]; then \ - echo "Error: VERSION is required. Usage: make release-version VERSION=v1.2.3"; \ - exit 1; \ - fi - @version="$(VERSION)"; \ - if ! echo "$$version" | grep -q "^v"; then \ - version="v$$version"; \ - fi; \ - echo "Creating release: $$version"; \ - latest_tag=$$(git describe --tags --abbrev=0 2>/dev/null || echo ""); \ - if [ -z "$$latest_tag" ]; then \ - commit_logs=$$(git log --pretty=format:"- %s" --no-merges); \ - else \ - commit_logs=$$(git log "$${latest_tag}..HEAD" --pretty=format:"- %s" --no-merges); \ - fi; \ - if [ -z "$$commit_logs" ]; then \ - tag_message="Release $$version"; \ - else \ - tag_message="Release $$version\n\n$$commit_logs"; \ - fi; \ - git tag -a "$$version" -m "$$tag_message"; \ - git push origin "$$version"; \ - echo "Tag $$version created and pushed to remote repository." +release-version: ## Auto-increment patch version, update package files, commit, tag, and push + @CURRENT=$$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0"); \ + MAJOR=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'); \ + MINOR=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'); \ + PATCH=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'); \ + NEXT="v$$MAJOR.$$MINOR.$$((PATCH + 1))"; \ + PKGVER="$$MAJOR.$$MINOR.$$((PATCH + 1))"; \ + echo "Current: $$CURRENT → Next: $$NEXT"; \ + sed -i "s/^pkgver=.*/pkgver=$$PKGVER/" linux/arch/PKGBUILD; \ + sed -i "s/^Version:.*/Version: $$PKGVER/" linux/centos/relspec.spec; \ + git add linux/arch/PKGBUILD linux/centos/relspec.spec; \ + git commit -m "chore(release): update package version to $$PKGVER"; \ + git tag -a "$$NEXT" -m "Release $$NEXT"; \ + git push origin HEAD "$$NEXT"; \ + echo "Pushed $$NEXT — release workflow triggered" help: ## Display this help screen @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' diff --git a/linux/arch/PKGBUILD b/linux/arch/PKGBUILD new file mode 100644 index 0000000..c4e85b2 --- /dev/null +++ b/linux/arch/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Hein (Warky Devs) +pkgname=relspec +pkgver=1.0.42 +pkgrel=1 +pkgdesc="Database schema conversion and analysis tool" +arch=('x86_64' 'aarch64') +url="https://git.warky.dev/wdevs/relspecgo" +license=('MIT') +makedepends=('go') +source=("$pkgname-$pkgver.zip::$url/archive/v$pkgver.zip") +sha256sums=('SKIP') + +build() { + cd "relspecgo" + export CGO_ENABLED=0 + go build \ + -trimpath \ + -ldflags "-X git.warky.dev/wdevs/relspecgo/cmd/relspec.version=$pkgver" \ + -o "$pkgname" ./cmd/relspec +} + +check() { + cd "relspecgo" + go test ./... +} + +package() { + cd "relspecgo" + + # Binary + install -Dm755 "$pkgname" "$pkgdir/usr/bin/$pkgname" + + # Default config dir + install -dm755 "$pkgdir/etc/relspec" +} diff --git a/linux/centos/relspec.spec b/linux/centos/relspec.spec new file mode 100644 index 0000000..52a14be --- /dev/null +++ b/linux/centos/relspec.spec @@ -0,0 +1,43 @@ +Name: relspec +Version: 1.0.42 +Release: 1%{?dist} +Summary: Database schema conversion and analysis tool + +License: MIT +URL: https://git.warky.dev/wdevs/relspecgo +Source0: %{name}-%{version}.tar.gz + +BuildRequires: golang >= 1.24 + +%global debug_package %{nil} +%define _debugsource_packages 0 +%define _debuginfo_subpackages 0 + +%description +RelSpec provides bidirectional conversion between various database schema +formats including PostgreSQL, MySQL, SQLite, Prisma, TypeORM, GORM, Drizzle, +DBML, GraphQL, and more. + +%prep +%autosetup + +%build +export CGO_ENABLED=0 +go build \ + -trimpath \ + -ldflags "-X git.warky.dev/wdevs/relspecgo/cmd/relspec.version=%{version}" \ + -o %{name} ./cmd/relspec + +%install +install -Dm755 %{name} %{buildroot}%{_bindir}/%{name} +install -Dm644 LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE +install -dm755 %{buildroot}%{_sysconfdir}/relspec + +%files +%license LICENSE +%{_bindir}/%{name} +%dir %{_sysconfdir}/relspec + +%changelog +* Wed Apr 08 2026 Hein (Warky Devs) - 1.0.42-1 +- Initial package diff --git a/linux/debian/control b/linux/debian/control new file mode 100644 index 0000000..5d572d4 --- /dev/null +++ b/linux/debian/control @@ -0,0 +1,11 @@ +Package: relspec +Version: VERSION +Architecture: ARCH +Maintainer: Hein (Warky Devs) +Section: database +Priority: optional +Homepage: https://git.warky.dev/wdevs/relspecgo +Description: Database schema conversion and analysis tool + RelSpec provides bidirectional conversion between various database schema + formats including PostgreSQL, MySQL, SQLite, Prisma, TypeORM, GORM, Drizzle, + DBML, GraphQL, and more.