unity-builder icon indicating copy to clipboard operation
unity-builder copied to clipboard

Errors when following docs for multiple private repositories: Could not resolve hostname ?

Open ARPP3 opened this issue 1 year ago • 4 comments

Bug description

After following instructions for multiple private GitHub repositories, the builder still fails to pull packages due to SSH hostname resolution errors.

This is the error message:

com.example.package: Error when executing git command. ssh: Could not resolve hostname key-somehashwashere.github.com: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

Where somehashwashere is a 64-character hexadecimal string and com.example.package is my package name. I have 3 packages that all fail similarly with their own hostname not being able to resolve. I believe the error might lie in the step "Prepare SSH config for unity builder" copied from the documentation.

How to reproduce

I have 3 repositories hosted privately, and I followed the instructions as best I understood them. For each private repository, I generated a private/public key on my computer, and I used the git formatted URL as described in the docs so it can be used as a deploy key. This was done for each of my 3 private projects, the public keys were added to their individual deploy settings and the private keys were created as named secrets in my repository that I am trying to build.

name: Build Windows

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+'

  workflow_dispatch:
    inputs:
      platform:
        description: 'Platform'
        required: true
        default: 'all'
        type: choice
        options:
        - all
        - windows
        #- macos
        #- linux
jobs:
  build-windows:
    if: startsWith(github.ref, 'refs/tags/') || inputs.platform == 'windows' || inputs.platform == 'all'

    name: Build Windows
    runs-on: ubuntu-latest
    steps:
      # Checkout
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: false
    
      - name: Add GitHub to the SSH known hosts file
        run: |
          mkdir -p -m 0700 $HOME/.ssh
          curl --silent https://api.github.com/meta | jq --raw-output '"github.com "+.ssh_keys[]' >> $HOME/.ssh/known_hosts
          chmod 600 $HOME/.ssh/known_hosts
        shell: bash
          
      - name: Setup SSH Agent
        uses: webfactory/[email protected]
        with:
          ssh-private-key: |
            ${{ secrets.PRIVATE_SSH_KEY_ONE }}
            ${{ secrets.PRIVATE_SSH_KEY_TWO }}
            ${{ secrets.PRIVATE_SSH_KEY_THREE }}

      - name: Prepare SSH config for unity builder
        run: |
          mkdir $HOME/.ssh_docker
          cp $HOME/.ssh/config $HOME/.ssh_docker/
          cp $HOME/.ssh/key* $HOME/.ssh_docker/
          cp $HOME/.ssh/known_hosts $HOME/.ssh_docker/
          sed -i 's/\/home\/runner/\/root/g' $HOME/.ssh_docker/config
          sudo chown -R root:root $HOME/.ssh_docker
          GIT_CONFIG_EXTENSIONS=$(git config --list | grep '^url\.')
          {
            echo 'GIT_CONFIG_EXTENSIONS<<EOF'
            echo "$GIT_CONFIG_EXTENSIONS"
            echo EOF
          } >> "$GITHUB_ENV"
          # Test DNS resolution and dump known hosts
          cat $HOME/.ssh/known_hosts
          hostname="key-57269d5d3ca57a1bf55ae7e38015720b3ab6c537c3668918b23b75ad4aeb6c84.github.com"
          if nslookup $hostname >/dev/null 2>&1; then
            echo "DNS resolution successful for $hostname"
            exit 0  # Exit with success status
          else
            echo "DNS resolution failed for $hostname"
            exit 0  # Still exit with success status to prevent job failure
          fi
        shell: bash
          
      # Build
      - name: Build project
        uses: game-ci/unity-builder@v4
        env:
          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
          UNITY_SERIAL: ${{ secrets.UNITY_SERIAL }}
        with:
          targetPlatform: StandaloneWindows64
          sshAgent: ${{ env.SSH_AUTH_SOCK }}
          sshPublicKeysDirectoryPath: ${{ env.HOME }}/.ssh_docker
          versioning: Tag

      # Output
      - uses: actions/upload-artifact@v3
        with:
          name: Build
          path: build

Expected behavior

Package manager is able to download packages from private repositories

Additional details

  • The owner of the 3 private repositories is an organization I created but I am testing this with my personal account. I have access and I loaded the deploy keys directly to them.
  • I tested with a single private SSH key previously but this resulted in a different error ( Error when executing git command. ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory. Host key verification failed. )
  • I had the same error about ssh_askpass with a public repository in the package manifest so I switched the protocol to HTTPS in the package manifest file, resolving it (since it was not private)
  • I am using GitHub runners, not self-hosted. So they should be consistent

ARPP3 avatar Feb 29 '24 13:02 ARPP3