repman-io / repman

Repman - PHP Repository Manager: packagist proxy and host for private packages
https://repman.io
MIT License
519 stars 106 forks source link

404 while fetch my private package #673

Open julienbonvarlet opened 8 months ago

julienbonvarlet commented 8 months ago

Hello !

I get some 404 errors while fetching my private packages:

Using HTTP basic authentication with username "token"
Downloading https://faume-co.repo.repman.io/packages.json
[200] https://faume-co.repo.repman.io/packages.json
Writing /Users/tyloo/Library/Caches/composer/repo/https---faume-co.repo.repman.io/packages.json into cache
Downloading https://faume-co.repo.repman.io/p2/faume/php.json
Downloading https://faume-co.repo.repman.io/p2/faume/shipping-bundle.json
[404] https://faume-co.repo.repman.io/p2/faume/php.json
[404] https://faume-co.repo.repman.io/p2/faume/shipping-bundle.json

Do you guys have any idea how to fix this please ? Thanks !

LBos-PH commented 8 months ago

I have the same problem

anthonyvancauwenberghe commented 8 months ago

Same isssue what's going on?

gerdemann commented 8 months ago

Only a workaround: A manual click on "Update" in the package solves the problem for individual packages.

Sfonxs commented 8 months ago

Only a workaround: A manual click on "Update" in the package solves the problem for individual packages.

Thanks, this solved it for us.

SteJW commented 8 months ago

Same issue here. We have like a 100 packages though. Any fixes from repman's part?

SteJW commented 8 months ago

Made a small (ugly) script to automate. If you get the json with all your packages from https://repman.io/docs/api/, you can use this to update everything at once.

` $decoded = json_decode($json, true); foreach($decoded['data'] as $package) { $curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.repman.io/api/organization/###org_name###/package/' . $package['id'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => array(
    'X-API-TOKEN: ###YOUR API KEY###'
),
));

$response = curl_exec($curl);
var_dump($response, $package['id']);
curl_close($curl);

}`

gerdemann commented 8 months ago

I have extended the script a little. Only the API token and the organisation need to be entered at the top.

<?php
$apiToken = '### MY API TOKEN ###';
$organisation = 'MyOrganisationName';

$apiURLBase = 'https://app.repman.io/api/organization/' . $organisation . '/package';
$allData = [];
$page = 1;
do {
    $curl = curl_init();

    curl_setopt_array(
        $curl,
        [
            CURLOPT_URL => $apiURLBase . '?page=' . $page,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_HTTPHEADER => [
                'accept: application/json',
                'X-API-TOKEN: ' . $apiToken
            ],
        ]
);

    $response = curl_exec($curl);

    if (curl_errno($curl)) {
        echo "cURL error: " . curl_error($curl) . "\n";
        exit(1);
    }

    $decodedResponse = json_decode($response, true);

    curl_close($curl);

    if (!empty($decodedResponse['data'])) {
        $allData = array_merge($allData, $decodedResponse['data']);
    }

    $nextPageUrl = $decodedResponse['links']['next'] ?? null;
    $page++;
} while ($nextPageUrl !== null);

foreach ($allData as $package) {
    $curl = curl_init();

    curl_setopt_array(
        $curl,
        [
            CURLOPT_URL => 'https://app.repman.io/api/organization/' . $organisation . '/package/' . $package['id'],
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'PUT',
            CURLOPT_HTTPHEADER => [
                'X-API-TOKEN: ' . $apiToken
            ],
        ]
    );

    $response = curl_exec($curl);
    curl_close($curl);

    echo 'Updated package: ' . $package['name'] . PHP_EOL;
}
echo '---------------------------' . PHP_EOL;
echo 'done' . PHP_EOL;

Put this in an update.php file and call it up like this:

php update.php
treestonemedia commented 8 months ago

@gerdemann thanks for the script, I tried it but none of my packages are getting updated - seems like updating one by one doesn't work anymore, I tried it form the GUI and still couldn't get any package to update

ProxiBlue commented 8 months ago

FWIW I use this script and works 100% (always) for me:

https://gist.github.com/ProxiBlue/f00ecb42c1eade71c8c0f991da6d13f0

adaluppa commented 8 months ago

Hello. If you still experience issues, please contact us at support@buddy.works and send us the URL of the package and its version.

treestonemedia commented 8 months ago

Hello @adaluppa , all packages are now working fine

swichers commented 8 months ago

This is an ongoing problem and has been for years. Something with the shared version results in sync backlogs and invalid caches. You have to manually re-sync the libraries from time to time.

I provided a script a while back to do this https://github.com/repman-io/repman/issues/568#issuecomment-1071996304

Long term solution is likely to host your own copy of repman.

core23 commented 7 months ago

Having the problem again.

Are there any information what's causing the issue from time to time?