Как удалить среду 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

Насколько я понимаю

  • Если вы хотите удалить вкладку «Среды», отображаемую в правой части экрана
  • Если вы хотите удалить определенные среды

Вкладка «Удалить среды»

Чтобы удалить всю вкладку
  1. На странице вашего репозитория нажмите кнопку «Настройки».
  2. Снимите флажок «Отметить в средах»

Это удалит вкладку «Среды» с правой стороны

Удалить определенные среды

Для удаления определенной среды
  1. Нажмите Настройки
  2. Нажмите на среду
  3. Здесь вы можете удалить определенную среду

Я создал онлайн-инструмент для удаления развертываний.

Я столкнулся с той же проблемой и нашел код @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), не стесняйтесь вносить свой вклад в код.

Другие вопросы по тегам