Как удалить среду Github
Мой вопрос касается очистки вкладки "Среды" в репозитории Github.
Ранее я развертывался через Heroku, используя автоматическое развертывание из двух отдельных веток Github (одна для подготовки, одна для производства).
Это создало вкладку "Среды" в хранилище, в которой были показаны обе среды Heroku - в точности так, как задумано.
После того, как я начал погружаться в конвейеры Heroku, я настроил приложение для перехода в производство из поэтапного производства, чтобы производственная среда больше не выполняла автоматическое развертывание из филиала.
На вкладке "Среды" в моем репозитории Github нет способа удалить среду, которую я больше не использую. Кажется, я не могу найти места на Github или Heroku, чтобы Github "забыл" эту среду развертывания.
Я надеюсь, что мой вопрос достаточно ясен; если я могу уточнить что-нибудь, пожалуйста, дайте мне знать.
14 ответов
Похоже, что для этого нет пользовательского интерфейса, но вы можете сделать это с помощью API GitHub.
Перед этим вам, вероятно, следует отключить GitHub и Heroku.
Сначала перейдите в настройки своей учетной записи GitHub, затем в настройки разработчика, а затем в личные токены доступа. Создайте новый токен, для которого разрешено repo_deployments. После его создания сохраните шестнадцатеричный токен, он вам понадобится для будущих запросов API.
Для этих примеров я предполагаю, что ваше имя пользователя $aaaa
и имя вашего репо $bbbb
и ваш токен доступа $tttt
. Замените их своим фактическим именем пользователя, именем репо и токеном доступа. Или просто используйте переменные оболочки для хранения фактических значений, которые позволят вам напрямую вставлять блоки кода.
Сначала перечислите все развертывания в вашем репо:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments
Каждое развертывание имеет id
целое число. Обратите внимание на это и замените$iiii
в следующих блоках кода с этим идентификатором. Или создайте для него другую переменную оболочки.
Теперь вам нужно создать "неактивный" статус для этого развертывания:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii/statuses -X POST -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' -H "authorization: token $tttt"
И теперь вы можете удалить развертывание навсегда:
curl https://api.github.com/repos/$aaaa/$bbbb/deployments/$iiii -X DELETE -H "authorization: token $tttt"
Если у вас несколько развертываний, отправьте первый запрос, чтобы увидеть все оставшиеся развертывания, а затем вы можете удалить их, если хотите.
После удаления всех развертываний кнопка сред в репозитории GitHub исчезнет.
Информация взята из документации по развертыванию GitHub и документации GitHub oauth. Это сработало для меня.
Я также сделал небольшую веб-страницу / скрипт, чтобы автоматизировать процесс (у меня не установлен Python, и я не видел, чтобы кто-то другой уже сделал скрипт), и это онлайн, и размещение вашей информации сделает процесс автоматически.
Stackblitz - средство удаления развертываний Github
Изменить 18/07/2020: я скопировал скрипт из Stackblitz в локальный фрагмент кода здесь, на всякий случай, если Stackblitz исчезнет:
// RECOMMENDED: Disconnect HEROKU from Github before doing this (though not strictly necessary, I think).
//See https://stackru.com/a/61272173/6569950 for more info.
// PARAMETERS
const TOKEN = ""; // MUST BE `repo_deployments` authorized
const REPO = "your-repo"; // e.g. "monorepo"
const USER_OR_ORG = "your-name"; // e.g. "your-name"
// GLOBAL VARS
const URL = `https://api.github.com/repos/${USER_OR_ORG}/${REPO}/deployments`;
const AUTH_HEADER = `token ${TOKEN}`;
// UTILITY FUNCTIONS
const getAllDeployments = () =>
fetch(`${URL}`, {
headers: {
authorization: AUTH_HEADER
}
}).then(val => val.json());
const makeDeploymentInactive = id =>
fetch(`${URL}/${id}/statuses`, {
method: "POST",
body: JSON.stringify({
state: "inactive"
}),
headers: {
"Content-Type": "application/json",
Accept: "application/vnd.github.ant-man-preview+json",
authorization: AUTH_HEADER
}
}).then(() => id);
const deleteDeployment = id =>
fetch(`${URL}/${id}`, {
method: "DELETE",
headers: {
authorization: AUTH_HEADER
}
}).then(() => id);
// MAIN
getAllDeployments()
.catch(console.error)
.then(res => {
console.log(`${res.length} deployments found`);
return res;
})
.then(val => val.map(({
id
}) => id))
.then(ids => Promise.all(ids.map(id => makeDeploymentInactive(id))))
.then(res => {
console.log(`${res.length} deployments marked as "inactive"`);
return res;
})
.then(ids => Promise.all(ids.map(id => deleteDeployment(id))))
.then(res => {
console.log(`${res.length} deployments deleted`);
return res;
})
.then(finalResult => {
const appDiv = document.getElementById("app");
appDiv.innerHTML = `
<h1>CLEANUP RESULT</h1>
<br>
Removed Deployments: ${finalResult.length}
<br>
<br>Ids:<br>
${JSON.stringify(finalResult)}
<br><br><br><br><br><br>
<p>(Open up the console)</p>
`;
});
h1,
h2 {
font-family: Lato;
}
<div id="app">
<h1>Github Deployment's Cleaner</h1>
<p> You need to put the parameters in!</p>
</div>
Это не ответит на вопрос OP, я сначала думал, что это будет, но он не вел себя так, как я ожидал. Поэтому я добавляю этот ответ как вики сообщества.
GitHub, похоже, имеет два понятия «Среды», одно из которых означает OP, - это «общедоступные среды», но GitHub также, похоже, имеет своего рода «частные среды».
Я добавляю свой опыт в качестве ответа ниже, потому что это действительно сбивает с толку.
Вы можете получить доступ к «частным средам» через «Настройки> Среды». (Например:
https://github.com/UnlyEd/next-right-now/settings/environments
)
Затем вы можете удалить каждую среду. Появится диалоговое окно подтверждения. После подтверждения среда будет уничтожена.
Я удалил «промежуточную» и «производственную» среды.
Но публичные среды все еще продолжают существовать вместе со всеми их развертываниями. (и это не то, что хочет OP)
Публичная среда по- прежнему содержит «постановку» и «постановку».
Основываясь на ответе @Cadence, я создал следующий сценарий bash. Просто установите соответствующие параметры и дайте ему поработать.
Для токена требуется repo_deployment
Область действия OAuth.
env=asd
token=asd
repo=asd
user=asd
for id in $(curl -u $user:$token https://api.github.com/repos/$user/$repo/deployments\?environment\=$env | jq ".[].id"); do
curl -X POST -u $user:$token -d '{"state":"inactive"}' -H 'accept: application/vnd.github.ant-man-preview+json' https://api.github.com/repos/$user/$repo/deployments/$id/statuses
curl -X DELETE -u $user:$token https://api.github.com/repos/$user/$repo/deployments/$id
done
Я создал интерактивный скрипт на Python, который может удалять определенные среды по имени (что было моей проблемой) или все ваши развертывания. Проверьте это и дайте мне знать, работает ли он для вас: https://github.com/VishalRamesh50/Github-Environment-Cleaner.
Это также фактически удалит все ваши развертывания, даже если у вас их более 30, в отличие от других скриптов здесь, потому что он проходит через разбитые на страницы данные ответа из API Github, а не просто использует первую страницу.
Я ожидаю, что вы уже получили ответ на свой вопрос. Этот ответ предназначен для тех, кто не хочет удалять вкладку «Среды» оттуда GitHib Repo
Насколько я понимаю
- Если вы хотите удалить вкладку «Среды», отображаемую в правой части экрана
- Если вы хотите удалить определенные среды
Вкладка «Удалить среды»
Чтобы удалить всю вкладку- На странице вашего репозитория нажмите кнопку «Настройки».
- Снимите флажок «Отметить в средах»
Это удалит вкладку «Среды» с правой стороны
Удалить определенные среды
Для удаления определенной средыЯ создал онлайн-инструмент для удаления развертываний.
Я столкнулся с той же проблемой и нашел код @spersico очень удобным, но мне нужно было немного больше инструментов / обратной связи. Я повторил код @spersico, чтобы добавить немного внешнего интерфейса. Как и в версии @spersico, все вызовы выполняются на стороне клиента (и отображаются в журналах консоли / сети).
Проект с открытым исходным кодом на Github и имеет размещенную версию на Netlify, которую можно использовать мгновенно:https://github-deployment-cleaner.netlify.app/
К сожалению, похоже, что панель управления "Развертывания" в настоящее время находится в стадии бета-тестирования, а это значит, что они могут еще не иметь функции.
Читайте здесь.
Я только что использовал этот скрипт Python: 5 минут и удалил нежелательную среду:
https://github.com/VishalRamesh50/Github-Environment-Cleaner
В сообществе GitHub есть обсуждение: https://github.community/t/how-to-remove-the-environment-tab/10584/10?u=aerendir
Пожалуйста, проголосуйте за эту функцию.
Использование интерфейса командной строки GitHub :
org=':org:'
repo=':repo:'
env=':env:'
gh api "repos/${org}/${repo}/deployments?environment=${env}" \
| jq -r .[].id \
| xargs -n 1 -I % sh -c "
gh api -X POST -F state=inactive repos/${org}/${repo}/deployments/%/statuses
gh api -X DELETE repos/${org}/${repo}/deployments/%
"
Чтобы удалить среду Github, перейдите в «Настройки» -> «Среды» -> и щелкните значок корзины рядом со средой, которую вы хотите удалить (см. рисунок ниже).
Подробнее об этом можно прочитать в официальной документации Github: Удаление среды
Используя ответ @Cadence, я сделал быстрый и грязный скрипт python3 для автоматизации процесса. Просто запустите его и введите свою информацию, и все развертывания будут удалены, а вкладка "Развертывания" будет удалена из репозитория.
См. Эту суть: https://gist.github.com/ewen-lbh/30f8237e218b14f0f40ca5ed13bf24d6
Я не знаю, было ли это уже опубликовано, но я определенно не хотел удалять свои 40+ развертываний вручную, поэтому я создал следующий сценарий, не стесняйтесь его использовать:)
#!/bin/bash
REPO=<your GH name>/<your project name>
TOKEN=<your personal access token>
# https://starkandwayne.com/blog/bash-for-loop-over-json-array-using-jq/
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
echo "$DEPLOYMENT_ID"
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID/statuses" \
-X POST \
-d '{"state":"inactive"}' \
-H 'accept: application/vnd.github.ant-man-preview+json' \
-H "authorization: token $TOKEN"
done
for deployment in $(curl https://api.github.com/repos/$REPO/deployments | jq -r '.[] | @base64'); do
DEPLOYMENT_ID=$(echo "$deployment" | base64 --decode | jq -r '.id')
curl "https://api.github.com/repos/$REPO/deployments/$DEPLOYMENT_ID" \
-X DELETE \
-H "authorization: token $TOKEN"
done
Вы можете удалить среду из репозитория, если она
public
. Но в случае
private
репозитории, либо вы должны сделать его общедоступным, либо использовать API github. Оба работают, но вот мой подход к удалению сред.
Я создал пакет npm ( здесь) для того же самого. Просто получите токен доступа github с помощью
repo_deployments
область включена.
Теперь беги
npx delete-github-environment
и выберите среду, которую вы хотите удалить. Если все прошло правильно, ваша среда будет удалена.
PS: Вот мой репозиторий на github — ( github), не стесняйтесь вносить свой вклад в код.