Skip to content

Separate PackageCloud Channels (stable, dev, latest) #157

@geunwoonoh

Description

@geunwoonoh

Overview

Currently, all releases are deployed to a single PackageCloud repository (alpacax/alpamon).
To better manage development/test versions separately from production versions,
we need to implement a channel-based deployment system.

Current Situation

  • All tags are deployed to a single alpacax/alpamon repository
  • Pre-release tags (-rc, -beta, -dev, etc.) are not being used
  • Users cannot distinguish between development and stable versions when installing

Proposed Changes

Channel Structure

Channel PackageCloud Repository Tag Pattern Purpose
stable alpacax/alpamon v1.2.3 Production releases
latest alpacax/alpamon-latest v1.2.3-rc.N Release candidates (RC)
dev alpacax/alpamon-dev v1.2.3-dev, v1.2.3-beta.N, v1.2.3-alpha.N Development/test builds

Tag Naming Convention

Tag Format Channel Example
vX.Y.Z stable v1.3.0
vX.Y.Z-rc.N latest v1.3.0-rc.1
vX.Y.Z-beta.N dev v1.3.0-beta.1
vX.Y.Z-alpha.N dev v1.3.0-alpha.1
vX.Y.Z-dev dev v1.3.0-dev

Implementation Tasks

Prerequisites (Manual)

  • Create alpamon-dev repository on PackageCloud
  • Create alpamon-latest repository on PackageCloud

Code Changes

  • Modify .github/workflows/release.yml
    • Add channel detection logic to goreleaser job
    • Implement dynamic repository deployment in packagecloud-deploy job
  • Add release.prerelease: auto to .goreleaser.yaml

Implementation Details

release.yml Changes

  1. Add outputs to goreleaser job

    • Analyze tag pattern to determine channel and repository
    • Pass channel, repo, tag via outputs
  2. Modify packagecloud-deploy job

    • Use needs.goreleaser.outputs.repo for dynamic repository targeting
    • Maintain existing matrix strategy

Channel Detection Logic

if [[ "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  # Stable version -> stable
  REPO="alpamon"
elif [[ "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc ]]; then
  # RC version -> latest
  REPO="alpamon-latest"
elif [[ "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+-(dev|beta|alpha) ]]; then
  # Development version -> dev
  REPO="alpamon-dev"
fi

Release Workflow Example

v1.3.0-dev      → alpamon-dev      (Initial development)
v1.3.0-alpha.1  → alpamon-dev      (Alpha testing)
v1.3.0-beta.1   → alpamon-dev      (Beta testing)
v1.3.0-rc.1     → alpamon-latest   (RC testing)
v1.3.0          → alpamon          (Production release)

Test Plan

  • Create dev tag and verify deployment to alpamon-dev
  • Create rc tag and verify deployment to alpamon-latest
  • Create stable tag and verify deployment to alpamon

Impact

  • Existing alpamon repository users: No impact (remains as stable channel)
  • New channel subscription requires separate repository registration

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions