是否可以将包可见性从私有更改为公共,反之亦然?
在文档中有一个声明:
私有和公共软件包:您可以私下托管软件包或将其设为公开。您可以私下托管包并与您的同事或组织共享,或将它们向全世界公开。
但是我在 repo 中找不到任何设置,也没有在文档中找到有关如何将包公开的信息。
我试图实现的用例:带有 SDK 源代码和公共(稳定版本)/私有(内部测试)包的私有存储库。
我们可以使用公共版本创建一个单独的公共存储库,但这有点开销并且破坏了将代码和包托管在一个地方的主要思想:
GitHub Package Registry 是一种软件包托管服务,类似于 npmjs.org、rubygems.org 或 hub.docker.com,它允许您在一个地方托管您的包和代码。
将不胜感激任何帮助和信息。
对于我的项目,我正在尝试从 GitHub Packages 安装(而不是发布!)一个 npm 包。它托管在组织中的私有存储库上。我已经制作了一个个人访问令牌,具有从该 repo 和 org 读取所需的权限。所有这些都可以通过以下步骤在本地工作:
.npmrc文件中设置注册表:registry=https://npm.pkg.github.com/OWNERnpm login --registry=https://npm.pkg.github.com
然后会提示:> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS
Username 是你的标准 github 用户名Token 是使用正确权限创建的个人访问令牌Email 可以是随机的填写完成后,一切正常,我可以安装该包,以及托管在普通 npm 注册表中的所有其他包。现在问题来了:我试图在 circleCI 上复制相同的内容,但它似乎并没有让我覆盖 npm 注册表。该项目在.npmrc其所在的同一文件夹中包含一个文件package.json。这是圆 ci conf 的一部分:
      - run:
          name: "Set NPM registry"
          command: npm config set registry https://npm.pkg.github.com/OWNER
      - run:
          name: "Authenticate with GitHub package registry"
          command: echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES}" > web_ui/frontend/.npmrc
      - …据我所知,PowerShell 存储库是 NuGet 存储库...
GitHub 刚刚发布了他们的包注册表,我的公司目前将其用于 npm,但也有一个用于 NuGet 的端点。
我可以使用我的 GitHub 凭据访问 NuGet 端点 ( https://nuget.pkg.github.com/mycompany/index.json ),它返回一个有效的 json:
{
      "version": "3.0.0-beta.1",
      "resources": [
        {
          "@id": "https://nuget.pkg.github.com/mycompany/download",
          "@type": "PackageBaseAddress/3.0.0",
          "comment": "Get package content (.nupkg)."
        },
        {
          "@id": "https://nuget.pkg.github.com/mycompany/query",
          "@type": "SearchQueryService",
          "comment": "Filter and search for packages by keyword."
        },
        {
          "@id": "https://nuget.pkg.github.com/mycompany/query",
          "@type": "SearchQueryService/3.0.0-beta",
          "comment": "Filter and search for packages by keyword."
        },
        {
          "@id": "https://nuget.pkg.github.com/mycompany/query",
          "@type": "SearchQueryService/3.0.0-rc",
          "comment": "Filter and search for packages by keyword."
        }, …我在 Android 项目中使用 GitHub 包有一段时间了,没有任何问题。现在,当我尝试发布新包时,出现错误:
无法 PUT 从服务器接收到状态代码 422:无法处理的实体
为了确保我没有更改任何内容,我回到了几天前成功发布包的 git-tag,我只更改了版本以生成不同的包。我犯了同样的错误。
我添加了日志,我可以看到令牌被正确读取,所有值(组、版本等)似乎都是正确的,并且我尝试发布的文件位于正确的文件夹中。我还尝试创建和使用新令牌,以防旧令牌出现问题,但无济于事。
如果我发布了太多文件,GitHub 会拒绝发布该错误吗?我没有找到有关您在这种情况下遇到的错误的任何文档。
编辑
我还尝试创建一个新项目并发布到该项目,以防在最初的项目中出现问题,但它也不起作用。
我尝试直接使用 CURL 放置文件,这意味着令牌是正确的,并且问题不是已发布包的总大小限制:
curl -X PUT \
"https://maven.pkg.github.com/companyname/repositoryname/com/companyname/artifactid/v2.1.520/artifactid-v2.1.520.aar" \
-H "Authorization: token mytoken” \
--upload-file “/full/path/to/file.aar" -vvv
当然,这不是解决方案,因为我需要使用 pom 等发布 maven repo。
结束编辑
在这里,我的配置已经工作了很长时间,并且只是按照文档+我添加的日志来调查问题。
在build.gradle:
allprojects {
    repositories {
        google()
        jcenter()
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/companyname/companyname-android-sdk")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("GitHubPackagesUsername")
                password = project.findProperty("gpr.key") ?: System.getenv("GitHubPackagesToken")
                println "GitHubPackages build.gradle\n\tusername=$username\n\ttoken=$password"
            }
        }
    }
}
在publish-artifacts.gradle:
publishing …我正在构建一个 Android 库(例如MyLibrary),它将添加到我公司的其他应用程序中。该库在文件中有一些依赖项,build.gradle如下所示:
dependencies{
    implementation 'com.alimuzaffar.lib:pinentryedittext:2.0.6'
    implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
// ... other dependencies
}
创建库后,我创建了一个 Github 包,因此我可以将其添加到s文件AppDemo中的另一个应用程序(例如),如下所示:AppDemobuild.gradle
dependencies{
    implementation 'com.mycompany:mylibrary:1.2.3'
    // other dependencies
}
问题是我遇到依赖项错误,即缺少MyLibrarys 依赖项(在本例中为pinentryedittext,play-services-auth-api-phone如上面库的文件所示)。build.gradle我用谷歌搜索了这个问题并尝试了一些解决方案,例如Mobbeel fataar gradle 插件和其他一些类似的插件,但我无法使它们工作。有人可以帮我解决这个问题或者给我一个工作样本吗?任何帮助都将非常重要。
上周工作正常,所以不确定发生了什么。(对一些格式表示歉意,因为它有很多行日志)
节点版本:v10.15.3
npm 版本:6.4.1
我npm publish在我的项目文件夹中执行此操作并收到以下错误:
npm ERR! code E400
npm ERR! failed to stream package from json: repo name with owner has wrong number of components: [github.com company dev-js] (wanted 2, got 3) : @company/dev-js
npm ERR! A complete log of this run can be found in:
npm ERR!     /home/luke/.npm/_logs/2020-01-27T16_00_11_703Z-debug.log
调试日志如下:
18 verbose getPublishConfig { registry: 'https://npm.pkg.github.com/' }
19 silly mapToRegistry name @company/dev-js
20 silly mapToRegistry scope (from package name) @company
21 verbose mapToRegistry no registry URL …我正在创建一个 github docker 容器操作,其中涉及许多依赖项 python、node、pypi 包和 npm 包。为了加快操作速度,我将大量依赖项安装从入口点移至 Dockerfile。现在我的动作运行得非常快,但每次构建动作都需要很长时间。
有没有办法可以预先构建该操作,或者我是否需要将我的操作 docker 映像发布到某处的存储库并从我的自定义映像提供数据?
作为参考,这是我的 Dockerfile。
FROM python:3
LABEL "com.github.actions.name"="kedro-action"
LABEL "com.github.actions.description"="A Github Action to run kedro commands"
LABEL "com.github.actions.icon"="it-branch"
LABEL "com.github.actions.color"="black"
LABEL "repository"="http://github.com/WaylonWalker/kedro-action"
LABEL "maintainer"="Waylon Walker <waylon@waylonwalker.com>"
RUN apt-get update
RUN apt-get install -y jq
ENV PYENV_ROOT /root/.pyenv
ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
### INSTALL PYTHON ###
RUN pyenv install 3.7.6
RUN pyenv global 3.7.6
RUN python -m pip install --upgrade pip
RUN pip install kedro
RUN …docker docker-repository github-actions github-package-registry
经过大量的试验和错误,我最终通过以下操作/命令在 Github 包注册表上获得了 NuGet 包:
\nwrite:packages, read:packages,delete:packagesrepo您的 OAuth 令牌的范围dotnet nuget add source --username [GithubUserName] --password [YourApiKey] --name github https://nuget.pkg.github.com/[UsernameOrOrganizationName]/index.jsongithub源\ndotnet nuget push --source github bin\\Release\\MyAwesomePackage.1.0.0.nupkg我可以在 GitHub 上看到我的 NuGet 包,所以现在我想安装它。
\n …我正在尝试在运行 Github Action 时安装托管在 Github Packages 中的 Nuget 包。
此命令用于添加源并且构建正在运行:
dotnet nuget add source https://nuget.pkg.github.com/<ORGNAME>/index.json -n github -u <MY_USERNAME> -p ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text
所以 - 这是有效的,我的构建运行良好。
但是 -我想-u <MY_USERNAME>从行动中删除。我想使用像 这样的通用值${{ secrets.GITHUB_TOKEN }}。如果我离开组织或其他什么 - 我不希望依赖于特定帐户。
我设法使用本教程在 Github packageregistry 上发布了一个简单的测试包: https: //docs.github.com/en/packages/quickstart
现在,如果我理解正确的话,要在项目中使用它,我必须创建一个包含以下行的 .npmrc 文件:
@OWNER:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=PAT
1-如果其他人想要安装我的公共软件包,我需要向他们提供我自己的 PAT 吗?或者您可以使用自己的 PAT 安装任何 Github 公共包吗?
2-如何在 .npmrc 文件中隐藏我的 PAT?我尝试在 .env 文件中设置一个 TOKEN 变量(与 .npmrc 文件位于同一目录中)并使用 ${TOKEN} 调用它,但它似乎不起作用(运行 npm install 时身份验证失败,而直接在它起作用的文件中插入相同的 PAT)。
谢谢
github ×5
android ×2
gradle ×2
nuget ×2
circleci ×1
circleci-2.0 ×1
docker ×1
java ×1
javascript ×1
node.js ×1
npm ×1
powershell ×1