Skip to content

Conversation

edavidaja
Copy link
Collaborator

@edavidaja edavidaja commented Sep 22, 2025

This commit introduces comprehensive RPM package support alongside existing DEB packages,
migrates to nfpm for package building, and adds automated Cloudsmith publishing.

Package Building Changes:

  • Migrated from dpkg-deb to nfpm for both DEB and RPM package creation
  • Added makeInstallerRpm() function in installer.ts using shared nfpm configuration
  • Created RPM-specific post-install and post-remove scripts in package/scripts/linux/rpm/
  • Added js-yaml import for generating nfpm configuration files
  • Implemented architecture mapping (DEB: amd64/arm64, RPM: x86_64/aarch64)

GitHub Actions Workflow Improvements:

  • Consolidated 4 separate Linux installer jobs into single matrix job (make-installer-linux)
    • Matrix: arch=[x86_64, aarch64] × format=[deb, rpm]
    • Reduced workflow from ~160 to ~60 lines for Linux installers
  • Added nfpm installation step (downloads binary from GitHub releases, version 2.43.1)
  • Updated all artifact references to use new naming: Linux-{format}-{arch}-Installer

Cloudsmith Publishing:

  • Added cloudsmith-push job for automated package repository publishing
    • Publishes to both "open" and "pro" Posit repositories
    • Uses matrix strategy: 2 archs × 2 formats × 2 repos = 8 push operations
    • Configured with any-distro/any-version for broad compatibility

Build System Updates:

  • Added make-installer-rpm command to bld.ts
  • Updated all job dependencies (publish-release, cleanup-when-failure, docker-push)
  • Updated checksum generation and release file paths for new artifact names

This enables users to install Quarto via standard package managers (apt, yum, dnf, zypper)
from Posit's Cloudsmith repositories after configuring the appropriate repository source.

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

@posit-snyk-bot
Copy link
Collaborator

posit-snyk-bot commented Sep 22, 2025

🎉 Snyk checks have passed. No issues have been found so far.

security/snyk check is complete. No issues have been found. (View Details)

license/snyk check is complete. No issues have been found. (View Details)

@edavidaja edavidaja self-assigned this Sep 22, 2025
@edavidaja
Copy link
Collaborator Author

From review discussion:

  • I have unintentionally renamed the amd64 binaries to x86_64, which I should fix.
  • These may not publish to pro, in which case we can simplify the matrix.

@edavidaja edavidaja requested a review from cderv September 22, 2025 16:33
This commit introduces comprehensive RPM package support alongside existing DEB packages,
migrates to nfpm for package building, and adds automated Cloudsmith publishing.

Package Building Changes:
- Migrated from dpkg-deb to nfpm for both DEB and RPM package creation
- Added makeInstallerRpm() function in installer.ts using shared nfpm configuration
- Created RPM-specific post-install and post-remove scripts in package/scripts/linux/rpm/
- Added js-yaml import for generating nfpm configuration files
- Implemented architecture mapping (DEB: amd64/arm64, RPM: x86_64/aarch64)

GitHub Actions Workflow Improvements:
- Consolidated 4 separate Linux installer jobs into single matrix job (make-installer-linux)
  - Matrix: arch=[x86_64, aarch64] × format=[deb, rpm]
  - Reduced workflow from ~160 to ~60 lines for Linux installers
- Added nfpm installation step (downloads binary from GitHub releases, version 2.43.1)
- Updated all artifact references to use new naming: Linux-{format}-{arch}-Installer

Cloudsmith Publishing:
- Added cloudsmith-push job for automated package repository publishing
  - Publishes to both "open" and "pro" Posit repositories
  - Uses matrix strategy: 2 archs × 2 formats × 2 repos = 8 push operations
  - Configured with any-distro/any-version for broad compatibility

Build System Updates:
- Added make-installer-rpm command to bld.ts
- Updated all job dependencies (publish-release, cleanup-when-failure, docker-push)
- Updated checksum generation and release file paths for new artifact names

This enables users to install Quarto via standard package managers (apt, yum, dnf, zypper)
from Posit's Cloudsmith repositories after configuring the appropriate repository source.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@edavidaja
Copy link
Collaborator Author

Successful run with new builds: https://github.com/quarto-dev/quarto-cli/actions/runs/17951317627

@edavidaja
Copy link
Collaborator Author

edavidaja commented Sep 23, 2025

From review discussion:

  • I have unintentionally renamed the amd64 binaries to x86_64, which I should fix.
~/Downloads via 🐍 v3.13.7 via ⨁ v1.8.24 via R v4.5.1
❯ unzip Linux-rpm-x86_64-Installer.zip
Archive:  Linux-rpm-x86_64-Installer.zip
  inflating: quarto-1.9.1-linux-x86_64.rpm

~/Downloads via 🐍 v3.13.7 via ⨁ v1.8.24 via R v4.5.1
❯ unzip Linux-deb-x86_64-Installer.zip
Archive:  Linux-deb-x86_64-Installer.zip
  inflating: quarto-1.9.1-linux-amd64.deb

~/Downloads via 🐍 v3.13.7 via ⨁ v1.8.24 via R v4.5.1
❯ unzip Linux-deb-aarch64-Installer.zip
Archive:  Linux-deb-aarch64-Installer.zip
  inflating: quarto-1.9.1-linux-arm64.deb

~/Downloads via 🐍 v3.13.7 via ⨁ v1.8.24 via R v4.5.1
❯ unzip Linux-rpm-aarch64-Installer.zip
Archive:  Linux-rpm-aarch64-Installer.zip
  inflating: quarto-1.9.1-linux-aarch64.rpm

it looks like the installers themselves have the correct names, it's just the intermediate folders that have changed names, which I don't think matters.

@cderv
Copy link
Collaborator

cderv commented Sep 24, 2025

it looks like the installers themselves have the correct names, it's just the intermediate folders that have changed names, which I don't think matters.

This is something to check and think about. As this means Artifact names have changed

image

Previous installer

image

This is updated in th workflow to create the release... so the assets in release will be ok in terms of name.

So only users that do have scripts to download artifact could be affected. So any using gh run download (https://cli.github.com/manual/gh_run_download)

But I do think this is an ok breaking change as we do put the artifact in release and anyone is supposed to get them there.

So we could add a note in the changelog for 1.9, probably.

Also, we may need to do the work for 1.8 as a backport if you want to have some 1.8 patch stable release in Cloudsmith without waiting for the next 1.9.

But I can do that after this PR is merged.

So I believe this is ok. I'll take a bit more time to review before merging, in case I am thinking of anything.

@cderv cderv self-assigned this Sep 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants