Skip to content

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

@ARPP3

Description

@ARPP3

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions