main #131
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: main | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
schedule: | |
- cron: "0 5 * * 0" | |
defaults: | |
run: | |
working-directory: 'mtulio.okd_installer' | |
jobs: | |
# Run linters: yaml-lint and ansible-lint. | |
lint: | |
name: lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out the codebase. | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
submodules: recursive | |
- name: Set up Python 3. | |
uses: actions/setup-python@v3 | |
with: | |
python-version: '3.x' | |
- name: Install test dependencies. | |
run: pip3 install yamllint ansible-lint | |
- name: YAML-lint | |
run: yamllint . | |
- name: Ansible-lint | |
run: ansible-lint ./ | |
# Run molecule tests. | |
# TODO: more tests should be added to molecule before running it every build. | |
# Disabling molecule step (and debian) until more consistent tests is added. | |
molecule: | |
name: molecule | |
runs-on: ubuntu-latest | |
needs: [lint] | |
strategy: | |
matrix: | |
include: | |
- distro: centos7 | |
playbook: converge.yml | |
# - distro: debian10 | |
# playbook: converge.yml | |
steps: | |
- name: Check out the codebase. | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
submodules: recursive | |
- name: Set up Python 3. | |
uses: actions/setup-python@v3 | |
with: | |
python-version: '3.x' | |
- name: Install test dependencies. | |
run: | | |
python3 -m pip install --upgrade pip | |
python3 -m pip install -r requirements.txt | |
# - name: Run Molecule tests. | |
# run: molecule test | |
# env: | |
# PY_COLORS: '1' | |
# ANSIBLE_FORCE_COLOR: '1' | |
# MOLECULE_DISTRO: ${{ matrix.distro }} | |
# MOLECULE_PLAYBOOK: ${{ matrix.playbook }} | |
# Build a Collection and save to artifacts. | |
build: | |
name: builder(Collection) | |
runs-on: ubuntu-latest | |
needs: [molecule] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
fetch-depth: 5 | |
submodules: recursive | |
- name: Build Collection | |
env: | |
VERSION: "0.0.0-ci.${{ github.run_number }}-${{ github.run_id }}" | |
run: | | |
echo "> Building VERSION=[$VERSION]" | |
ansible-playbook hack/ci/deploy.yml \ | |
-e tag="$VERSION" \ | |
-t build | |
echo "> Listing built artifacts: " | |
ls build/mtulio-okd_installer-*.tar.gz | |
echo "> Renaming to 'latest': " | |
mv -v build/mtulio-okd_installer-$VERSION.tar.gz \ | |
/tmp/mtulio-okd_installer-latest.tar.gz | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: mtulio-okd_installer-builds | |
path: /tmp/mtulio-okd_installer-latest.tar.gz | |
# Build a container image in PRs only, without publishing it. | |
build-container: | |
name: release container(devel) | |
if: ${{ github.event_name == 'pull_request' && github.base_ref == 'main' }} | |
runs-on: ubuntu-latest | |
needs: [build] | |
env: | |
VERSION: "0.0.0-dev.${{ github.run_number }}-${{ github.run_id }}" | |
IMAGE: quay.io/mrbraga/okd-installer | |
VERCEL_VERSION: 28.20.0 | |
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} | |
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
fetch-depth: 5 | |
submodules: recursive | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: mtulio-okd_installer-builds | |
path: /tmp/build/ | |
- name: Build container image | |
env: | |
QUAY_USER: ${{ secrets.QUAY_USER }} | |
QUAY_PASS: ${{ secrets.QUAY_PASS }} | |
run: | | |
echo "> Check build artifacts dir /tmp/build:" | |
ls -l /tmp/build | |
echo "> Moving artifacts to local:" | |
mkdir ./build || true | |
mv -v /tmp/build/*.tar.gz ./build | |
echo "> Logging to Quay.io:" | |
podman login -u="${QUAY_USER}" -p="${QUAY_PASS}" quay.io | |
echo "> Build container image: ${IMAGE}:${VERSION}" | |
podman build -t ${IMAGE}:${VERSION} -f hack/Containerfile . | |
echo "> Publish container image: ${IMAGE}:${VERSION}" | |
podman push ${IMAGE}:${VERSION} | |
# Building docs preview | |
- name: Set step vars | |
id: vars | |
run: | | |
echo "cache-key-pip=pip-docs-${{ hashFiles('**/docs/requirements.txt') }}" >> $GITHUB_OUTPUT | |
echo "cache-dir-pip=$(pip cache dir)" >> $GITHUB_OUTPUT | |
- name: Set pip cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.vars.outputs.cache-dir-pip }} | |
key: ${{ steps.vars.outputs.cache-key-pip }} | |
- name: Set npm cache | |
uses: actions/cache@v3 | |
with: | |
path: "${HOME}/.npm" | |
key: "npm-vercel-${VERCEL_VERSION}" | |
- name: Build and Deploy Preview Docs | |
id: verceldeploy | |
run: | | |
npm install --global vercel@${VERCEL_VERSION} | |
vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }} | |
vercel build --token=${{ secrets.VERCEL_TOKEN }} | |
PREVIEW_URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }}) | |
echo "Discovered Preview URL: ${PREVIEW_URL}" | |
echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT | |
# Commenting in PR | |
- name: Find comment | |
uses: peter-evans/find-comment@v2 | |
id: fbc | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: '<!-- id-build-comment -->' | |
- name: Create comment | |
if: steps.fbc.outputs.comment-id == '' | |
uses: peter-evans/create-or-update-comment@v3 | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
<!-- id-build-comment --> | |
Artifacts built by CI: | |
- Container: ${{ env.IMAGE }}:${{ env.VERSION }} | |
- Docs Preview: ${{ steps.verceldeploy.outputs.url }} | |
reactions: rocket | |
- name: Update comment | |
if: steps.fbc.outputs.comment-id != '' | |
uses: peter-evans/create-or-update-comment@v3 | |
with: | |
comment-id: ${{ steps.fbc.outputs.comment-id }} | |
body: | | |
<!-- id-build-comment --> | |
Artifacts built by CI: | |
- Container: ${{ env.IMAGE }}:${{ env.VERSION }} | |
- Docs Preview: ${{ steps.verceldeploy.outputs.url }} | |
reactions: hooray | |
edit-mode: replace | |
# Build a container image on main branch, publishing the 'latest' to repository. | |
publish-container-latest: | |
name: release container(latest/ci) | |
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
runs-on: ubuntu-latest | |
needs: [build] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
fetch-depth: 5 | |
submodules: recursive | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: mtulio-okd_installer-builds | |
path: /tmp/build/ | |
- name: Build container image | |
env: | |
VERSION: latest | |
VERSION_BUILD: "0.0.0-ci.${{ github.run_number }}-${{ github.run_id }}" | |
IMAGE: quay.io/mrbraga/okd-installer | |
QUAY_USER: ${{ secrets.QUAY_USER }} | |
QUAY_PASS: ${{ secrets.QUAY_PASS }} | |
run: | | |
echo "> Check build artifacts dir /tmp/build:" | |
ls -l /tmp/build | |
echo "> Moving artifacts to local:" | |
mkdir ./build || true | |
mv -v /tmp/build/*.tar.gz ./build | |
echo "> Logging to Quay.io:" | |
podman login -u="${QUAY_USER}" -p="${QUAY_PASS}" quay.io | |
echo "> Build container image: ${IMAGE}:${VERSION_BUILD}" | |
podman build -t ${IMAGE}:${VERSION} -f hack/Containerfile . | |
podman tag ${IMAGE}:${VERSION} ${IMAGE}:${VERSION_BUILD} | |
echo "> Publish container image: ${IMAGE}:${VERSION} ${VERSION_BUILD}" | |
podman push ${IMAGE}:${VERSION} | |
podman push ${IMAGE}:${VERSION_BUILD} | |
# Build a Collection when the tag is created, publishing it to Galaxy. | |
release-to-galaxy: | |
name: release collection(Galaxy) | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
needs: [build] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
fetch-depth: 5 | |
submodules: recursive | |
- name: Get version | |
id: get_version | |
run: echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT | |
- name: Deploy to Galaxy | |
env: | |
VERSION: ${{ steps.get_version.outputs.VERSION }} | |
BUILD_FILE: mtulio-okd_installer-${{ steps.get_version.outputs.VERSION }}.tar.gz | |
ANSIBLE_GALAXY_TOKEN: ${{ secrets.ANSIBLE_GALAXY_TOKEN }} | |
run: | | |
echo VERSION=[$VERSION] | |
ansible-playbook hack/ci/deploy.yml \ | |
-e tag="${VERSION}" \ | |
-t build,deploy | |
mv -v build/${BUILD_FILE} /tmp/${BUILD_FILE} | |
- name: Save artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: mtulio-okd_installer-build-${{ steps.get_version.outputs.VERSION }} | |
path: /tmp/mtulio-okd_installer-${{ steps.get_version.outputs.VERSION }}.tar.gz | |
# Build a Container image with the Collection release, publishing it to repository. | |
publish-container-release: | |
name: release container(tag) | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
needs: [release-to-galaxy] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
path: 'mtulio.okd_installer' | |
fetch-depth: 5 | |
submodules: recursive | |
- name: Get version | |
id: get_version | |
run: echo "VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: mtulio-okd_installer-build-${{ steps.get_version.outputs.VERSION }} | |
path: /tmp/build/ | |
- name: Build container image | |
env: | |
VERSION: ${{ steps.get_version.outputs.VERSION }} | |
VERSION_BUILD: "0.0.0-ci.${{ github.run_number }}-${{ github.run_id }}" | |
IMAGE: quay.io/mrbraga/okd-installer | |
QUAY_USER: ${{ secrets.QUAY_USER }} | |
QUAY_PASS: ${{ secrets.QUAY_PASS }} | |
run: | | |
echo "> Check build artifacts dir /tmp/build:" | |
ls -l /tmp/build | |
echo "> Moving artifacts to local:" | |
mkdir ./build || true | |
mv -v /tmp/build/*.tar.gz ./build | |
echo "> Logging to Quay.io:" | |
podman login -u="${QUAY_USER}" -p="${QUAY_PASS}" quay.io | |
echo "> Build container image:" | |
podman build -t ${IMAGE}:${VERSION} -f hack/Containerfile . | |
podman tag ${IMAGE}:${VERSION} ${IMAGE}:${VERSION_BUILD} | |
echo "> Publish container image:" | |
podman push ${IMAGE}:${VERSION} | |
podman push ${IMAGE}:${VERSION_BUILD} |