Githubからtarballをダウンロードする方法

Githubからtarballをダウンロードする方法

私はこれを持っています:

curl -L "https://github.com/cmtr/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"

私は github から tarball をダウンロードして、既存のディレクトリに解凍しようとしています。問題は、次のエラーが発生することです:

Step 10/13 : RUN curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"
 ---> Running in a883449de956
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     9  100     9    0     0     35      0 --:--:-- --:--:-- --:--:--    35
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
The command '/bin/sh -c curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"' returned a non-zero code: 2

なぜ tar アーカイブではないのか知っている人はいませんか? ブラウザで github.com にアクセスしてこのパターンを入力すると、tar.gz アーカイブがダウンロードされます。

https://github.com/<org>/<repo>/tarball/<sha>

なぜ機能しないのかはわかりません。

答え1

つまり、結局のところ、Github が認証情報を必要とするからです。2 要素認証がない場合は、curl で次のように実行できます。

curl -u username:password https://github.com/<org>/<repo>/tarball/<sha>

ただし、2 要素認証を設定している場合は、Github アクセス トークンを使用する必要があり、次のように github.com ではなく api.github.com を使用する必要があります。

 curl -L "https://api.github.com/repos/<org>/<repo>/tarball/$commit_sha?access_token=$github_token" | tar -xz -C "$extract_dir/"

アクセス トークンについては、こちらに記載されています: https://help.github.com/en/github/authenticating-to-github/コマンドライン用の個人アクセストークンの作成

答え2

これに対する別のアプローチは、GitHub クッキーを使用することです。通常のユーザー名/パスワードで始まりますが、最初のリクエストの後は、クッキーを利用してさらにリクエストを行うことができます。以下は PHP の例です。

<?php

# GET
$get = curl_init('https://github.com/login');
curl_setopt($get, CURLOPT_COOKIEJAR, 'github.txt');
curl_setopt($get, CURLOPT_RETURNTRANSFER, true);
$log = curl_exec($get);
curl_close($get);

# POST
preg_match('/name="authenticity_token" value="([^"]*)"/', $log, $auth);
$pf['authenticity_token'] = $auth[1];
$pf['login'] = getenv('USER');
$pf['password'] = getenv('PASS');
$post = curl_init('https://github.com/session');
curl_setopt($post, CURLOPT_COOKIEFILE, 'github.txt');
curl_setopt($post, CURLOPT_POSTFIELDS, $pf);
curl_exec($post);

その後は、 でシェル cURL を使用する-b github.txtか、 で PHP cURL を 使用できますCURLOPT_COOKIEFILE github.txtcurl_close上記のように を必ず実行してください。そうしないと、必要なときに Cookie ファイルが作成されます。

関連情報