Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
9bfba89
feat: implement lab01 devops info service
AEZuraa Jan 27, 2026
0d932cd
feat: add bonus task - Go implementation
AEZuraa Jan 27, 2026
04ac5c1
feat: Lab2 (containerize services with Docker) is completed
AEZuraa Feb 2, 2026
8e3e063
feat: add CI/CD pipeline with testing and Docker automation
AEZuraa Feb 10, 2026
5acffa1
Go lint fixes
AEZuraa Feb 10, 2026
64063b5
Go: fixed «path mismatch» issue during submitting results to codecov
AEZuraa Feb 11, 2026
22287f5
codecov badges added
AEZuraa Feb 11, 2026
604aee7
successful workflow runs added
AEZuraa Feb 11, 2026
b0318ae
feat(lab04): add IaC with Terraform and Pulumi (Yandex Cloud)
AEZuraa Feb 19, 2026
40c3aff
tflint fix
AEZuraa Feb 19, 2026
dc886c4
feat: complete lab05 - ansible roles for provisioning and deployment
AEZuraa Feb 24, 2026
ca97b25
feat(lab06): Ansible blocks/tags, Docker Compose, wipe logic, multi-a…
AEZuraa Mar 4, 2026
af86e99
fix(lab06): resolve all ansible-lint violations and CI vault issue
AEZuraa Mar 4, 2026
edba9c6
fix(lab06): verify deployment via SSH instead of external curl
AEZuraa Mar 4, 2026
cca4f0d
docs(lab06): add CI/CD workflow evidence with GitHub Actions links
AEZuraa Mar 4, 2026
c2fe9f8
feat(lab07): add observability stack with Loki, Promtail, and Grafana
AEZuraa Mar 6, 2026
39851f4
feat(lab08): add Prometheus metrics stack and dashboards
AEZuraa Mar 17, 2026
bde9df4
feat(lab09): add Kubernetes deployment with Ingress and TLS
AEZuraa Mar 22, 2026
cb5e3ea
feat: add Helm charts for Lab 10 with multi-env support, hooks, and l…
AEZuraa Mar 26, 2026
223767c
feat (lab11): add K8s secret management and HashiCorp Vault integrati…
AEZuraa Apr 2, 2026
d91e539
feat(lab12): add ConfigMaps and PVC persistence with visits counter, …
AEZuraa Apr 14, 2026
297d97a
fix(ci): update go/python tests for visits persistence and resolve li…
AEZuraa Apr 14, 2026
e11dc11
feat(lab13): add ArgoCD Application manifests for GitOps workflow
AEZuraa Apr 17, 2026
ccac837
feat(lab13): add ArgoCD multi-env deployment with self-healing and Ap…
AEZuraa Apr 17, 2026
bc08f12
docs(lab13): clean up ARGOCD.md and record live GitOps run
AEZuraa Apr 17, 2026
c56dd9f
feat(lab14): add Argo Rollouts progressive delivery with canary, blue…
AEZuraa Apr 19, 2026
0c03754
feat(lab15): add StatefulSet with headless DNS, per-pod PVCs, and upd…
AEZuraa Apr 29, 2026
4d79f12
feat(lab16): add Prometheus stack monitoring with init containers and…
AEZuraa May 10, 2026
5152f0d
Update lab17
Cre-eD Mar 25, 2026
dc34420
Update lab17
Cre-eD Mar 26, 2026
9c8815a
feat(lab17): deploy edge-api Cloudflare Worker with KV, secrets, and …
AEZuraa May 10, 2026
d2d5076
Merge branch 'master' into lab17
AEZuraa May 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions .github/workflows/ansible-deploy-bonus.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Ansible Deployment (Go Bonus)

on:
push:
branches: [master, lab06]
paths:
- 'ansible/vars/app_bonus.yml'
- 'ansible/playbooks/deploy_bonus.yml'
- 'ansible/roles/web_app/**'
- '.github/workflows/ansible-deploy-bonus.yml'
pull_request:
branches: [master]
paths:
- 'ansible/vars/app_bonus.yml'
- 'ansible/playbooks/deploy_bonus.yml'
- 'ansible/roles/web_app/**'

concurrency:
group: ansible-deploy-bonus-${{ github.ref }}
cancel-in-progress: true

jobs:
lint:
name: Ansible Lint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install dependencies
run: pip install ansible ansible-lint

- name: Create dummy vault password for lint
run: echo "lint-dummy" > ansible/.vault_pass

- name: Run ansible-lint
run: |
cd ansible
ansible-lint playbooks/deploy_bonus.yml roles/web_app/tasks/*.yml

deploy:
name: Deploy Go Bonus Application
needs: lint
runs-on: ubuntu-latest
if: github.event_name == 'push'

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Ansible
run: pip install ansible

- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.VM_HOST }} >> ~/.ssh/known_hosts

- name: Deploy with Ansible
run: |
cd ansible
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
ansible-playbook playbooks/deploy_bonus.yml \
-i inventory/hosts.ini \
--vault-password-file /tmp/vault_pass
rm -f /tmp/vault_pass

- name: Verify Deployment
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.VM_USER }}@${{ secrets.VM_HOST }} \
"curl -sf http://localhost:8001/health"
82 changes: 82 additions & 0 deletions .github/workflows/ansible-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Ansible Deployment (Python)

on:
push:
branches: [master, lab06]
paths:
- 'ansible/**'
- '!ansible/docs/**'
- '!ansible/vars/app_bonus.yml'
- '.github/workflows/ansible-deploy.yml'
pull_request:
branches: [master]
paths:
- 'ansible/**'

concurrency:
group: ansible-deploy-${{ github.ref }}
cancel-in-progress: true

jobs:
lint:
name: Ansible Lint
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install dependencies
run: pip install ansible ansible-lint

- name: Create dummy vault password for lint
run: echo "lint-dummy" > ansible/.vault_pass

- name: Run ansible-lint
run: |
cd ansible
ansible-lint playbooks/*.yml roles/*/tasks/*.yml

deploy:
name: Deploy Python Application
needs: lint
runs-on: ubuntu-latest
if: github.event_name == 'push'

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install Ansible
run: pip install ansible

- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.VM_HOST }} >> ~/.ssh/known_hosts

- name: Deploy with Ansible
run: |
cd ansible
echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}" > /tmp/vault_pass
ansible-playbook playbooks/deploy_python.yml \
-i inventory/hosts.ini \
--vault-password-file /tmp/vault_pass
rm -f /tmp/vault_pass

- name: Verify Deployment
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.VM_USER }}@${{ secrets.VM_HOST }} \
"curl -sf http://localhost:8000/health"
116 changes: 116 additions & 0 deletions .github/workflows/go-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
name: Go CI

on:
push:
branches: [master, lab03]
paths:
- 'app_go/**'
- '.github/workflows/go-ci.yml'
pull_request:
branches: [master]
paths:
- 'app_go/**'
- '.github/workflows/go-ci.yml'

# Cancel in-progress runs on same branch
concurrency:
group: go-ci-${{ github.ref }}
cancel-in-progress: true

env:
DOCKER_IMAGE: aezuraa/devops-info-service
GO_VERSION: '1.23'

jobs:
lint-and-test:
name: Lint & Test
runs-on: ubuntu-latest
defaults:
run:
working-directory: app_go

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go ${{ env.GO_VERSION }}
uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: app_go/go.mod

- name: Run golangci-lint
uses: golangci/golangci-lint-action@v6
with:
working-directory: app_go

- name: Run tests with coverage
run: |
go test -v -coverprofile=coverage.out ./...
go tool cover -func=coverage.out

- name: Fix coverage paths for Codecov
run: sed -i 's|devops-info-service/|app_go/|g' coverage.out

- name: Upload coverage to Codecov
if: github.event_name == 'push'
uses: codecov/codecov-action@v4
with:
file: app_go/coverage.out
flags: go
token: ${{ secrets.CODECOV_TOKEN }}
continue-on-error: true

docker:
name: Docker Build & Push
runs-on: ubuntu-latest
needs: lint-and-test
if: github.event_name == 'push'

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Generate CalVer version
id: version
run: |
echo "calver=$(date +'%Y.%m.%d')" >> $GITHUB_OUTPUT
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: app_go
push: true
tags: |
${{ env.DOCKER_IMAGE }}:go
${{ env.DOCKER_IMAGE }}:go-${{ steps.version.outputs.calver }}
${{ env.DOCKER_IMAGE }}:go-${{ steps.version.outputs.sha_short }}
cache-from: type=gha
cache-to: type=gha,mode=max

snyk:
name: Snyk Security Scan
runs-on: ubuntu-latest
needs: lint-and-test

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Snyk to check for vulnerabilities
uses: snyk/actions/golang@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --file=app_go/go.mod --severity-threshold=high
continue-on-error: true
Loading