diff --git a/.github/workflows/rockitcloud_public_release.yml b/.github/workflows/rockitcloud_public_release.yml new file mode 100644 index 000000000000..4b51c8ab1785 --- /dev/null +++ b/.github/workflows/rockitcloud_public_release.yml @@ -0,0 +1,27 @@ +name: Building the provider for the public registry + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + tests: + runs-on: ubuntu-22.04-large + steps: + - uses: actions/checkout@v3 + + - name: Import GPG key + id: import_gpg + uses: crazy-max/ghaction-import-gpg@v6 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + version: '~> v1' + args: release --clean --timeout 180m + env: + GITHUB_TOKEN: ${{ secrets.AUTOMATION_PAT }} + GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} diff --git a/.github/workflows/rockitcloud_unit_tests.yml b/.github/workflows/rockitcloud_unit_tests.yml new file mode 100644 index 000000000000..c37ca075a489 --- /dev/null +++ b/.github/workflows/rockitcloud_unit_tests.yml @@ -0,0 +1,54 @@ +name: Run tests and linters + +on: + pull_request_target: + types: [ labeled, unlabeled, opened, synchronize ] + +jobs: + check-code: + if: contains(github.event.pull_request.labels.*.name, 'check-code') + runs-on: ubuntu-22.04 + steps: + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.21.x + + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Install tools + run: | + make tools + - name: Install Docker + uses: crazy-max/ghaction-setup-docker@v3 + + - name: Run Unit tests and linters + run: | + make lint + make test + + check-doc: + if: contains(github.event.pull_request.labels.*.name, 'check-doc') + runs-on: ubuntu-22.04 + steps: + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.21.x + + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Install tools + run: | + make tools + - name: Install Docker + uses: crazy-max/ghaction-setup-docker@v3 + + - name: Run documentation's linters + run: | + make docs-lint + make website-lint diff --git a/docs/c2/README.md b/docs/c2/README.md index 22a57db6a8e4..4e21a8c7e045 100644 --- a/docs/c2/README.md +++ b/docs/c2/README.md @@ -24,6 +24,8 @@ - [Настройка окружения](#настройка-окружения) - [Версионирование](#версионирование) - [Релиз](#релиз) + - [Автоматический режим](#автоматический-режим) + - [Ручной режим](#ручной-режим) - [Публикация провайдера в официальном terraform registry](#публикация-провайдера-в-официальном-terraform-registry) - [Публикация провайдера в private terraform registry](#публикация-провайдера-в-private-terraform-registry) - [Структура s3 бакета](#структура-s3-бакета) @@ -161,6 +163,8 @@ replace github.com/aws/aws-sdk-go => Запуск unit тестов: `make test` +Так же можно запустить unit тесты с помощью проставления лейбла `check-code` в PR'е + ### Acceptance Для запуска приемочных тестов требуется установка [Terraform](https://golang.org/doc/install) @@ -226,6 +230,8 @@ $ make website-lint $ make docscheck ``` +Так же линтеры для документации можно запустить с помощью проставления лейбла `check-doc` в PR'е + ### Директория website_unsupported В `website_unsupported/` перенесены гайды и документация для ресурсов, которые не поддерживаются Rockit Cloud API. @@ -249,7 +255,7 @@ $ make docscheck ### Настройка окружения 1. Установка [goreleaser](https://goreleaser.com/install/) - - **Важно!** Для корректной работы утилиты goreleaser должен быть установлен Git как минимум 2.3 версии + - **Важно!** Для корректной работы утилиты goreleaser должен быть установлен Git как минимум 2.3 версии. ``` $ go install github.com/goreleaser/goreleaser@latest @@ -283,7 +289,7 @@ $ make docscheck 4. Создание **Personal Access Token** с разрешением **public_repo** ([инструкция от github](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)) - - **Важно!** Скопировать сгенерированный токен можно только сразу после создания + - **Важно!** Скопировать сгенерированный токен можно только сразу после создания. 5. Установка переменной `GITHUB_TOKEN` ``` @@ -305,12 +311,49 @@ $ make docscheck **Важно!** Релизы провайдера выпускаются с ветки **develop** (установлена дефолтной). Ветка **main** используется для получения обновлений с upstream. -1. Создание релизного PR'а в ветку **develop** +#### Автоматический режим + +**Важно!** В секретах репозитория уже должны быть преднастроены (делается один раз в рамках одного репозитория): + +- github token с правами public_repo - `AUTOMATION_PAT` +- Приватный ключ GPG (без пароля) - `GPG_PRIVATE_KEY` + +1. Мердж PR'ов в ветку **develop** +2. Создание релизного PR'а в ветку **develop** +(пример: [v24.1.0](https://github.com/C2Devel/terraform-provider-rockitcloud/pull/49)) + - **Опционально.** Обновление версии **aws-sdk-go**, если требуется + (см. [изменение версии aws-sdk-go](#изменение-версии-aws-sdk-go)) + - Обновление [CHANGELOG.md](../../CHANGELOG.md) +3. Мердж релизного PR'a +4. Установка релизного тега с версией (см. [версионирование](#версионирование)) и его публикация + + **Важно!** После публикации тэга автоматически запустится процесс создания релиза, но релиз будет в состоянии **draft**. + + ``` + $ git tag v1.2.3 + $ git push v1.2.3 + ``` + +5. Изменение **draft** релиза + Необходимо перенести последние записи из CHANGELOG.md в описание релиза +6. Выпуск релиза как **latest** + + **Важно!** После этого действия релиз будет опубликован в официальном реджистри **HashiCorp**. + **Важно!** Бывают случаи когда последняя версия провайдера не публикуется в реджистри, для этого в официальном реджистри **HashiCorp** нужно нажать кнопку **Resync**, чтобы реджистри еще раз подтянула последний релиз из репозитория. + +7. Публикация в приватный реджистри (см. [Публикация провайдера в private terraform registry](#публикация-провайдера-в-private-terraform-registry)) + +8. Выпуск внутренней документации (см. [Выпуск внутренней документации](#Выпуск-внутренней-документации)) + +#### Ручной режим + +1. Мердж PR'ов в ветку **develop** +2. Создание релизного PR'а в ветку **develop** (пример: [v24.1.0](https://github.com/C2Devel/terraform-provider-rockitcloud/pull/49)) - **Опционально.** Обновление версии **aws-sdk-go**, если требуется (см. [изменение версии aws-sdk-go](#изменение-версии-aws-sdk-go)) - Обновление [CHANGELOG.md](../../CHANGELOG.md) -2. Локальный запуск линтеров и unit тестов на ветке **develop** + релизный PR +3. Локальный запуск линтеров и unit тестов на ветке **develop** + релизный PR ``` $ make lint @@ -319,8 +362,8 @@ $ make docscheck $ make test ``` -3. Мердж релизного PR'а -4. **Опционально.** Включение автопубликации релиза в github (флаг `release.draft` в `.goreleaser.yml`) +4. Мердж релизного PR'а +5. **Опционально.** Включение автопубликации релиза в github (флаг `release.draft` в `.goreleaser.yml`) ``` # .goreleaser.yml @@ -331,15 +374,15 @@ $ make docscheck По умолчанию релиз будет опубликован в origin. -5. Подготовка репозитория: на релизной ветке не должно быть незакоммиченных изменений, untracked файлов -6. Установка релизного тега с версией (см. [версионирование](#версионирование)) и его публикация +6. Подготовка репозитория: на релизной ветке не должно быть незакоммиченных изменений, untracked файлов +7. Установка релизного тега с версией (см. [версионирование](#версионирование)) и его публикация ``` $ git tag v1.2.3 $ git push v1.2.3 ``` -7. Сборка и подпись релизных артефактов. Артефакты будут размещены в директории `dist/` +8. Сборка и подпись релизных артефактов. Артефакты будут размещены в директории `dist/` ``` $ $GOBIN/goreleaser release --clean --timeout 180m # Для версий goreleaser выше v1.15.0 @@ -347,7 +390,7 @@ $ make docscheck $ $GOBIN/goreleaser release --rm-dist --timeout 180m # Для версий goreleaser ниже v1.15.0 ``` -8. **Опционально.** Если на шаге 2 **не** была включена автопубликация (`release.draft: true`): +9. **Опционально.** Если на шаге 2 **не** была включена автопубликация (`release.draft: true`): создание релиза на github и загрузка артефактов: - `dist/terraform-provider-rockitcloud_{VERSION}_{OS}_{ARCH}.zip` - Для всех архитектур и ОС. @@ -359,9 +402,9 @@ $ make docscheck В описание дублируется запись из CHANGELOG.md. -9. Публикация в приватный реджистри (см. [Публикация провайдера в private terraform registry](#публикация-провайдера-в-private-terraform-registry)) +10. Публикация в приватный реджистри (см. [Публикация провайдера в private terraform registry](#публикация-провайдера-в-private-terraform-registry)) -10. Выпуск внутренней документации (см. [Выпуск внутренней документации](#Выпуск-внутренней-документации)) +11. Выпуск внутренней документации (см. [Выпуск внутренней документации](#Выпуск-внутренней-документации)) ## Публикация провайдера в официальном terraform registry