Skip to content

Conversation

@meiseayoung
Copy link

Summary

This PR adds support for publishing packages from GitHub organization repositories. Currently, VPM only allows users to publish packages from their personal GitHub accounts. This change enables users who are members of GitHub organizations to publish packages from organization repositories.

Problem

When a user (e.g., meiseayoung) is a member of a GitHub organization (e.g., v-hono) and wants to publish packages from organization repositories, they receive the error: "You must submit a package from your own account".

Solution

  1. Fetch user's organizations during OAuth login - When a user logs in via GitHub OAuth, we now fetch their organization memberships using the GitHub API (/user/orgs)

  2. Store organization memberships - Organizations are stored in a new UserOrganization table

  3. Validate against organizations - When creating a package, the URL is validated against both the user's account AND their organizations

  4. Use organization as package prefix - If the URL belongs to an organization, the package name uses the org name as prefix (e.g., v-hono.hono instead of meiseayoung.hono)

Changes

File Description
src/entity/organization.v New UserOrganization entity
src/repo/organization.v Database operations for organizations
src/auth.v Fetch user's organizations during OAuth login
src/usecase/package/packages.v Support organization URLs and prefixes
src/package.v Pass organization info to create function
src/usecase/package/packages_test.v Unit tests
src/repo/organization_test.v Unit tests

Database Migration

CREATE TABLE IF NOT EXISTS "UserOrganization" (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    org_name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_user_org_user_id ON "UserOrganization" (user_id);

- Add UserOrganization entity to store user's org memberships
- Fetch user's organizations during OAuth login via GitHub API
- Modify check_vcs() to accept URLs from user's organizations
- Automatically use organization name as package prefix when publishing from org repos

This allows users who are members of GitHub organizations to publish
packages from organization repositories. The package name will use
the organization name as prefix (e.g., 'v-hono.hono' instead of
'meiseayoung.hono' when publishing from v-hono organization).

Closes #XXX
- Add tests for extract_owner_from_url function
- Add tests for check_vcs backward compatibility
- Add tests for check_vcs_with_orgs new functionality
- Add tests for is_valid_mod_name validation
- Add tests for UserOrganization entity and membership logic

All 2 test files pass with 20+ test cases covering:
- Own account publishing (existing behavior)
- Organization member publishing (new feature)
- Non-member organization rejection
- Admin bypass
- Edge cases and error handling
@JalonSolov
Copy link

JalonSolov commented Jan 13, 2026

If you run v git-fmt-hook install, it will install a pre-commit hook in your clone that will run v fmt -w on your files on every commit.

@meiseayoung
Copy link
Author

If you run v git-fmt-hook install, it will install a pre-commit hook in your clone that will run v fmt -w on your files on every commit.

got it,thank you.

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