2015-05-06 19 views
6

Ho un rilascio github con ancora presenti attività:Impossibile caricare github patrimoniale liberazione attraverso API

$ curl https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets 
[ 

] 

ma non posso upload an asset a questa versione:

$ curl -X POST --header "Content-Type:application/edn" --data-binary @cljsdocs-full.edn "https://api.github.com/repos/cljsinfo/api-docs/releases/1260660/assets?name=full.edn&access_token=$(cat my-token)" 
{ 
    "message": "Not Found", 
    "documentation_url": "https://developer.github.com/v3" 
} 

mio accesso API token è public_repo accesso. Grazie per l'aiuto nel caricare questo bene.

+1

dovrebbe funzionare se si sostituisce '$ (cat my-token)' con il token attuale (in caso di ritorno a capo restituito da gatto è il problema)? – VonC

+0

@VonC grazie, buona cattura –

risposta

4

L'asset URL upload è di forma https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip. Ci sono diverse ragioni possibili si potrebbe ottenere l'errore molto scostante "Not Found":

  1. rilascio sbagliato id. Il campo :id nell'URL sopra riportato è NON il nome che hai fornito, ma un ID numerico generato da GitHub (probabilmente un ID di database). Per ottenere l'ID di rilascio, è necessario chiamare lo releases API e cercare la risposta JSON per un rilascio in cui lo tag_name è uguale al nome utilizzato. Ad esempio, se hai chiamato la tua versione v0.0.3, cerca nel JSON una versione con "tag_name": "v0.0.3" e utilizza il campo id di quella versione.
  2. URL di caricamento errato. L'URL che utilizzi per caricare le risorse non è lo stesso da utilizzare per tutte le altre chiamate API. Per ottenere l'URL di caricamento corretto, utilizzare lo stesso releases API, trovare il proprio rilascio utilizzando tag_name a descritto sopra ed estrarre il campo upload_url dalla risposta JSON. Questa è la risposta (accettata) di Ivan.
  3. Mancanti autorizzazioni token di accesso GitHub. Questo è quello che mi ha fatto incazzare il peggio, poiché il token che stavo usando era in grado di effettuare chiamate API all'API di rilascio e ottenere informazioni sul mio repository, ma NON caricare le risorse nello stesso repository. La risposta all'errore "Non trovato" non lascia intuire affatto. Verifica le autorizzazioni per il tuo token nel tuo personal access tokens page e assicurati che siano spuntati repo e/o public_repo, a seconda dei casi.
1

Si noti che per le Imprese aromatizzato GitHub, l'url di upload non è la stessa forma di 'github.com', e si dovrebbe utilizzare il 'UPLOAD_URL' restituita al momento della creazione/interrogazione del rilascio: Get Release API Docs

per esempio qui è quello che sta tornati dal nostro server aziendale github (leggermente munged per proteggere il colpevole):
"upload_url": "https://git.example.com/api/uploads/repos/example-owner/example-repo/releases/5/assets{?name,label}",