Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I make releases public from a private github repo?

I have an application which is in a private github repo, and am wondering if the releases could be made public so that the app can auto-update itself from github instead of us having to host it.

Additionally I'm wondering if it's possible to use the github api from the deployed app to check for new updates.

like image 504
eggbert Avatar asked Oct 06 '14 14:10

eggbert


People also ask

Can a private GitHub repo be made public?

Changing a repository's visibilityUnder your repository name, click Settings. Under "Danger Zone", to the right of to "Change repository visibility", click Change visibility. Select a visibility.

Can I share a private GitHub repo with someone?

You can invite users to become collaborators to your personal repository. If you're using GitHub Free, you can add unlimited collaborators on public and private repositories. Repositories owned by an organization can grant more granular access. For more information, see "Access permissions on GitHub."

Can you fork a private repository and make it public?

No. You can fork it and it still remains private. Private collaborators may fork any private repository you've added them to without their own paid plan. Their forks do not count against your private repository quota.

How do I change a project from private to public in GitHub?

Changing project visibilityNavigate to your project. In the top-right, click to open the menu. In the menu, click Settings to access the project settings. Next to Visibility in the "Danger zone", select Private or Public.


2 Answers

As @VonC mentioned we have to create a second Repository for that. This is not prohibited and i am doing it already. With github workflows i automated this task, I'm using a develop / master branching, so always when I'm pushing anything to the master branch a new version is build and pushed to the public "Realease" Repo.

In my specific use case I'm building an android apk and releasing it via unoffical github api "hub". Some additional advantage of this is you can have an extra issue tracker for foreign issues and bugs.

name: Master CI CD  # using checkout@v2 instead of v1 caus it needs further configuration  on:   pull_request:     types: [closed]  jobs:   UnitTest:     runs-on: ubuntu-latest     if: github.event.pull_request.merged     steps:       - uses: actions/checkout@v2       - name: make executable         run: chmod +x gradlew       - name: Unit tests         run: |           ./gradlew test   IncrementVersionCode:     needs: UnitTest     runs-on: ubuntu-latest     steps:       - uses: actions/checkout@v2       - name: set up JDK 1.8         uses: actions/setup-java@v1         with:           java-version: 1.8       - name: make executable         run: chmod +x gradlew       - name: increment version         run: ./gradlew incrementVersionCode       - name: Push new version to master         run: |           git config --local user.email "[email protected]"           git config --local user.name "WorkflowBot"           git commit -m "Increment Build version" -a           # maybe better amend commits to avoid bot commits   BuildArtifacts:     needs: IncrementVersionCode     runs-on: ubuntu-latest     steps:       - uses: actions/checkout@v2       - name: set up JDK 1.8         uses: actions/setup-java@v1         with:           java-version: 1.8       - name: make executable         run: chmod +x gradlew       - name: Build with Gradle         run: ./gradlew build -x lint        - name: Rename artifacts         run: |           cp app/build/outputs/apk/release/app-release.apk MyApp.apk       - name: Upload Release         uses: actions/upload-artifact@master         with:           name: Release Apk           path: MyApp.apk       - name: Upload Debug         uses: actions/upload-artifact@master         with:           name: Debug Apk           path: app/build/outputs/apk/debug/app-debug.apk    # https://dev.to/ychescale9/running-android-emulators-on-ci-from-bitrise-io-to-github-actions-3j76   E2ETest:     needs: BuildArtifacts     runs-on: macos-latest     strategy:       matrix:         api-level: [21, 27]         arch: [x86]     steps:       - name: checkout         uses: actions/checkout@v2       - name: Make gradlew executable         run: chmod +x ./gradlew       - name: run tests         uses: reactivecircus/android-emulator-runner@v2         with:           api-level: ${{ matrix.api-level }}           arch: ${{ matrix.arch }}           script: ./gradlew connectedCheck    Deploy:     needs: E2ETest     runs-on: ubuntu-latest     if: github.ref == 'refs/heads/master'     steps:       - uses: actions/checkout@v2 # Needed for gradle file to get version information       - name: Get Hub         run: |           curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1           cd bin           chmod +x hub           cd ..       - name: Get Apk         uses: actions/download-artifact@master         with:           name: Release Apk       - name: Publish         env:           GITHUB_TOKEN: "${{ secrets.RELEASE_REPO_SECRET }}"         run: |           APP_NAME=MyApp           VERSION_NAME=`grep -oP 'versionName "\K(.*?)(?=")' ./app/build.gradle`           VERSION_CODE=`cat version.properties | grep "VERSION_CODE" | cut -d'=' -f2`           FILENAME="${APP_NAME}-v${VERSION_NAME}-${VERSION_CODE}"           TAG="v${VERSION_NAME}-${VERSION_CODE}"           TAG="latest-master"           echo $APP_NAME           echo $VERSION_NAME           echo $VERSION_CODE           echo $FILENAME           echo $TAG           git clone https://github.com/MyUser/MyApp-Releases           cd MyApp-Releases           ./../bin/hub release delete "${TAG}" || echo "Failed deleting TAG: ${TAG}" # If release got lost catch error with message           ./../bin/hub release create -a "../${APP_NAME}.apk" -m "Current Master Build: ${FILENAME}" -p "${TAG}"   EvaluateCode:     needs: Deploy     runs-on: ubuntu-latest     steps:       - name: Get Hub         run: |           echo "TDOO: Run Jacoco for coverage, and other profiling tools" 
like image 40
Hatzen Avatar answered Nov 16 '22 00:11

Hatzen


A workaround would be to create a public repo, composed of:

  • empty commits (git commit --allow-empty)
  • each commit tagged
  • each tag with a release
  • each release with the deliveries (the binaries of your private app)

That way, you have a visible repo dedicated for release hosting, and a private repos for source development.

like image 190
VonC Avatar answered Nov 16 '22 00:11

VonC