diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0785216f..6b4bd0ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,14 +61,12 @@ jobs: ## Assets ### Complete Packages - - **`dms-full-amd64.tar.gz`** - Complete package for x86_64 systems (CLI binaries + QML source + installation guide) - - **`dms-full-arm64.tar.gz`** - Complete package for ARM64 systems (CLI binaries + QML source + installation guide) + - **`dms-full-amd64.tar.gz`** - Complete package for x86_64 systems (CLI binary + QML source + installation guide) + - **`dms-full-arm64.tar.gz`** - Complete package for ARM64 systems (CLI binary + QML source + installation guide) ### Individual Components - **`dms-cli-amd64.gz`** - DMS CLI binary for x86_64 systems - **`dms-cli-arm64.gz`** - DMS CLI binary for ARM64 systems - - **`dms-distropkg-amd64.gz`** - DMS CLI binary built with distro_package tag for AMD64 systems - - **`dms-distropkg-arm64.gz`** - DMS CLI binary built with distro_package tag for ARM64 systems - **`dms-qml.tar.gz`** - QML source code only ### Checksums @@ -114,16 +112,14 @@ jobs: # Download DMS CLI binaries from the danklinux repo gh release download "${TAG}" -R "${DMS_REPO}" --dir ./_dms_assets - # Rename CLI binaries to dms-cli-* format and copy distropkg binaries + # Rename CLI binaries to dms-cli-* format for file in _dms_assets/dms-*.gz*; do if [ -f "$file" ]; then basename=$(basename "$file") - if [[ "$basename" == dms-distropkg-* ]]; then - cp "$file" "_release_assets/$basename" - else - newname=$(echo "$basename" | sed 's/^dms-/dms-cli-/') - cp "$file" "_release_assets/$newname" - fi + # dms-amd64.gz -> dms-cli-amd64.gz + # dms-amd64.gz.sha256 -> dms-cli-amd64.gz.sha256 + newname=$(echo "$basename" | sed 's/^dms-/dms-cli-/') + cp "$file" "_release_assets/$newname" fi done @@ -152,12 +148,6 @@ jobs: chmod +x _temp_full/bin/dms fi - # Copy distropkg binary if it exists - if [ -f "_dms_assets/dms-distropkg-${arch}.gz" ]; then - gunzip -c "_dms_assets/dms-distropkg-${arch}.gz" > _temp_full/bin/dms-distropkg - chmod +x _temp_full/bin/dms-distropkg - fi - # Create INSTALL.md cat > _temp_full/INSTALL.md << 'EOF' # DankMaterialShell Installation @@ -176,7 +166,7 @@ jobs: cp -r dms ~/.config/quickshell/ ``` - 2. **Install the DMS CLI binaries:** + 2. **Install the DMS CLI binary:** ```bash sudo install -m 755 bin/dms /usr/local/bin/dms # or install to a local directory: @@ -204,8 +194,11 @@ jobs: - Ensure all dependencies are installed EOF - # Create the full package - (cd _temp_full && tar -czf "../_release_assets/dms-full-${arch}.tar.gz" .) + # Create the full package with proper RPM structure (dms-VERSION/ top-level directory) + mkdir -p dms-${TAG} + cp -r _temp_full/* dms-${TAG}/ + tar -czf _release_assets/dms-full-${arch}.tar.gz dms-${TAG} + rm -rf dms-${TAG} # Generate checksum (cd _release_assets && sha256sum "dms-full-${arch}.tar.gz" > "dms-full-${arch}.tar.gz.sha256") @@ -221,3 +214,109 @@ jobs: files: _release_assets/** env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Setup RPM build environment + run: | + sudo apt-get update + sudo apt-get install -y rpm wget curl jq + + # Setup rpmbuild tree + mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} + + - name: Prepare RPM sources + run: | + cd ~/rpmbuild/SOURCES + VERSION="${{ env.TAG }}" + + # Copy the full packages (already have proper RPM structure) + cp _release_assets/dms-full-amd64.tar.gz dms-${VERSION}-amd64.tar.gz + cp _release_assets/dms-full-arm64.tar.gz dms-${VERSION}-arm64.tar.gz + + echo "✅ Prepared tarballs for RPM" + ls -lh ~/rpmbuild/SOURCES/ + + - name: Create RPM spec file + run: | + VERSION="${{ env.TAG }}" + + cat > ~/rpmbuild/SPECS/dms.spec << 'SPECFILE' + %global debug_package %{nil} + + Name: dms + Version: VERSION_PLACEHOLDER + Release: 1%{?dist} + Summary: Dank Material Shell - Modern desktop environment + License: GPL-3.0-or-later + URL: https://github.com/AvengeMedia/DankMaterialShell + + Source0: dms-VERSION_PLACEHOLDER-amd64.tar.gz + Source1: dms-VERSION_PLACEHOLDER-arm64.tar.gz + + BuildArch: %{_arch} + + Requires: qt6-qtbase + Requires: qt6-qtdeclarative + Requires: qt6-qtwayland + Requires: quickshell + + %description + Dank Material Shell is a modern, Material Design-inspired desktop environment + for Linux systems built with Qt6 and QML. It provides a complete shell experience + with dynamic theming, plugin support, and integration with Wayland compositors. + + %prep + %setup -q + + %build + # Pre-compiled binaries, no build step needed + + %install + mkdir -p %{buildroot}%{_bindir} + mkdir -p %{buildroot}%{_datadir}/quickshell/dms + + # Install DMS CLI binary for current architecture + if [ -f bin/dms ]; then + install -m 755 bin/dms %{buildroot}%{_bindir}/dms + fi + + # Install QML/data files + if [ -d dms ]; then + cp -r dms/* %{buildroot}%{_datadir}/quickshell/dms/ + fi + + # Install documentation + if [ -f INSTALL.md ]; then + mkdir -p %{buildroot}%{_docdir}/%{name} + install -m 644 INSTALL.md %{buildroot}%{_docdir}/%{name}/ + fi + + %files + %{_bindir}/dms + %{_datadir}/quickshell/dms/ + %doc %{_docdir}/%{name}/INSTALL.md + + %changelog + * CHANGELOG_DATE_PLACEHOLDER GitHub Actions - VERSION_PLACEHOLDER-1 + - Automated build from release VERSION_PLACEHOLDER + SPECFILE + + # Replace placeholders + CHANGELOG_DATE=$(date '+%a %b %d %Y') + sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" ~/rpmbuild/SPECS/dms.spec + sed -i "s/CHANGELOG_DATE_PLACEHOLDER/$CHANGELOG_DATE/g" ~/rpmbuild/SPECS/dms.spec + + - name: Build SRPM + run: | + cd ~/rpmbuild/SPECS + rpmbuild -bs dms.spec + + echo "✅ SRPM built successfully" + ls -lh ~/rpmbuild/SRPMS/ + + - name: Upload to Copr + if: success() + run: | + cd ~/rpmbuild/SRPMS + copr-cli build dms dms-*.src.rpm + + echo "✅ Uploaded to Copr successfully"