initial commit
Change-Id: I12ab4ff8d5ef148640de63bdc0e9f41f3e885d8a
This commit is contained in:
126
.gitea/workflows/deploy.yml
Normal file
126
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,126 @@
|
||||
name: Deploy to Humanitec v2
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
environment:
|
||||
description: 'Target environment'
|
||||
required: true
|
||||
default: 'dev'
|
||||
type: choice
|
||||
options:
|
||||
- dev
|
||||
- staging
|
||||
- prod
|
||||
|
||||
env:
|
||||
HUMANITEC_ORG: skillful-wild-chicken-2617
|
||||
PROJECT_ID: demo-apps-1
|
||||
# Default environment (used on push); overridden at runtime by workflow_dispatch input
|
||||
DEFAULT_ENV_ID: dev
|
||||
HUMANITEC_TOKEN: ${{ secrets.HUMANITEC_TOKEN }}
|
||||
HUMANITEC_AUTH_TOKEN: ${{ secrets.HUMANITEC_TOKEN }}
|
||||
HUMANITEC_API_PREFIX: https://api.humanitec.dev
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to Humanitec v2
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install hctl CLI
|
||||
run: |
|
||||
echo "Installing hctl (Humanitec Platform Orchestrator v2 CLI)..."
|
||||
# Install jq if not present (node:20-bullseye base image omits it)
|
||||
if ! command -v jq &>/dev/null; then
|
||||
apt-get update -qq && apt-get install -y -qq jq
|
||||
fi
|
||||
HCTL_VERSION=$(curl -s https://api.github.com/repos/humanitec/hctl/releases/latest | jq -r '.tag_name')
|
||||
echo "Installing hctl ${HCTL_VERSION}..."
|
||||
mkdir -p /tmp/hctl-install
|
||||
curl -sLo /tmp/hctl-install/hctl.tar.gz "https://github.com/humanitec/hctl/releases/download/${HCTL_VERSION}/hctl_${HCTL_VERSION#v}_linux_amd64.tar.gz"
|
||||
tar -xzf /tmp/hctl-install/hctl.tar.gz -C /tmp/hctl-install
|
||||
install -m 755 /tmp/hctl-install/hctl /usr/local/bin/hctl
|
||||
hctl --version
|
||||
|
||||
- name: Validate environment
|
||||
run: |
|
||||
# Use workflow_dispatch input if provided, otherwise fall back to default
|
||||
DISPATCH_ENV="${{ github.event.inputs.environment }}"
|
||||
ENV_ID="${DISPATCH_ENV:-$DEFAULT_ENV_ID}"
|
||||
echo "ENV_ID=$ENV_ID" >> $GITHUB_ENV
|
||||
echo "Target environment: $ENV_ID"
|
||||
echo " Org: $HUMANITEC_ORG"
|
||||
echo " Project: $PROJECT_ID"
|
||||
echo " API: $HUMANITEC_API_PREFIX"
|
||||
|
||||
- name: Deploy with Score
|
||||
id: deploy
|
||||
run: |
|
||||
SHORT_SHA="${GITHUB_SHA:0:7}"
|
||||
echo "Deploying to Humanitec v2..."
|
||||
echo " Project: $PROJECT_ID"
|
||||
echo " Environment: $ENV_ID"
|
||||
echo " Commit: $SHORT_SHA"
|
||||
|
||||
hctl score deploy "$PROJECT_ID" "$ENV_ID" score.yaml \
|
||||
--no-prompt
|
||||
|
||||
echo "Deployment successful!"
|
||||
|
||||
- name: Deployment summary
|
||||
if: always()
|
||||
run: |
|
||||
SHORT_SHA="${GITHUB_SHA:0:7}"
|
||||
echo "## Deployment Result" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|---|---|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Project | \`$PROJECT_ID\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Environment | \`$ENV_ID\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Commit | \`$SHORT_SHA\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "[View in Humanitec Console](https://console.humanitec.dev/orgs/$HUMANITEC_ORG/projects/$PROJECT_ID/environments/$ENV_ID)" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
publish-techdocs:
|
||||
name: Publish TechDocs
|
||||
runs-on: ubuntu-latest
|
||||
needs: deploy
|
||||
if: github.ref == 'refs/heads/main'
|
||||
env:
|
||||
ENTITY_NAME: demo-app-1-v2
|
||||
STORAGE_ACCOUNT: bstagecjotdevsttechdocs
|
||||
AZURE_STORAGE_ACCOUNT_KEY: ${{ secrets.TECHDOCS_AZURE_STORAGE_KEY }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Python deps
|
||||
run: |
|
||||
apt-get update -qq && apt-get install -y -qq python3-pip
|
||||
pip3 install mkdocs-techdocs-core --quiet
|
||||
|
||||
- name: Install techdocs-cli
|
||||
run: npm install -g @techdocs/cli --silent
|
||||
|
||||
- name: Generate TechDocs
|
||||
run: techdocs-cli generate --no-docker --source-dir . --output-dir site/
|
||||
|
||||
- name: Publish TechDocs to Azure Blob Storage
|
||||
run: |
|
||||
techdocs-cli publish \
|
||||
--publisher-type azureBlobStorage \
|
||||
--azureAccountName "$STORAGE_ACCOUNT" \
|
||||
--storage-name techdocs \
|
||||
--entity default/Component/"$ENTITY_NAME" \
|
||||
--directory site/
|
||||
|
||||
- name: TechDocs summary
|
||||
if: always()
|
||||
run: |
|
||||
echo "## TechDocs" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Published docs for \`default/Component/$ENTITY_NAME\` to Azure Blob Storage (\`$STORAGE_ACCOUNT\`)." >> $GITHUB_STEP_SUMMARY
|
||||
82
README.md
Normal file
82
README.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# My Application v2 1
|
||||
|
||||
Application deployed via Humanitec Platform Orchestrator v2
|
||||
|
||||
## Humanitec Platform Orchestrator v2
|
||||
|
||||
This application deploys to [Humanitec Platform Orchestrator v2](https://humanitec.com) on Azure AKS via [Score](https://score.dev).
|
||||
|
||||
### Configuration
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| Organization | `skillful-wild-chicken-2617` |
|
||||
| Project | `demo-apps-1` |
|
||||
| Default Environment | `dev` |
|
||||
| Humanitec Console | [Open](https://console.humanitec.dev/orgs/skillful-wild-chicken-2617/projects/demo-apps-1) |
|
||||
|
||||
### Environments
|
||||
|
||||
| Environment | Namespace | Trigger |
|
||||
|---|---|---|
|
||||
| `dev` | `dev` | Every push to `main` (when default env is dev) |
|
||||
| `staging` | `staging` | Manual `workflow_dispatch` → select staging |
|
||||
| `prod` | `prod` | Manual `workflow_dispatch` → select prod |
|
||||
|
||||
To promote to staging or prod, use the **Run workflow** button in the Gitea Actions UI and select the target environment.
|
||||
|
||||
### Score Manifest (`score.yaml`)
|
||||
|
||||
Defines the workload — containers, ports, and external resource dependencies. Resources are resolved by the Humanitec platform at deploy time:
|
||||
|
||||
```yaml
|
||||
resources:
|
||||
env: # type: environment — injects env vars
|
||||
# blob: # type: azure-blob — Azure Blob Storage container
|
||||
# config: # type: azure-keyvault-secret — Key Vault secret
|
||||
# db: # type: postgres — Azure PostgreSQL database
|
||||
```
|
||||
|
||||
### CI/CD Workflow
|
||||
|
||||
Deployments are automated via Gitea Actions (`.gitea/workflows/deploy.yml`):
|
||||
|
||||
1. **Install hctl** — downloads the Humanitec v2 CLI from `humanitec/hctl`
|
||||
2. **Deploy** — runs `hctl score deploy <project> <env> score.yaml`
|
||||
3. **Humanitec runner** applies the Terraform module on AKS, creating/updating K8s Deployment + Service
|
||||
|
||||
The `HUMANITEC_TOKEN` secret must be set in the Gitea repository (done automatically by the Backstage template).
|
||||
|
||||
### Local Development
|
||||
|
||||
```bash
|
||||
# Run locally with Docker
|
||||
docker run -p 8080:80 nginx:alpine
|
||||
```
|
||||
|
||||
### Manual Deployment
|
||||
|
||||
To deploy manually using `hctl`:
|
||||
|
||||
```bash
|
||||
# Authenticate
|
||||
export HUMANITEC_TOKEN="your-service-user-token"
|
||||
|
||||
# Deploy to dev environment
|
||||
hctl score deploy demo-apps-1 dev \\
|
||||
--file score.yaml \\
|
||||
--message "Manual deployment" \\
|
||||
--token "$HUMANITEC_TOKEN"
|
||||
```
|
||||
|
||||
### View Deployment
|
||||
|
||||
Access the Humanitec v2 console:
|
||||
- [Project Overview](https://console.humanitec.dev/orgs/skillful-wild-chicken-2617/projects/demo-apps-1)
|
||||
- [Environment: dev](https://console.humanitec.dev/orgs/skillful-wild-chicken-2617/projects/demo-apps-1/environments/dev)
|
||||
|
||||
### Resources
|
||||
|
||||
- [Humanitec Platform Orchestrator v2 Docs](https://developer.humanitec.com/platform-orchestrator/docs/)
|
||||
- [Score Specification](https://score.dev)
|
||||
- [hctl CLI Reference](https://developer.humanitec.com/platform-orchestrator/docs/integrations/cli/)
|
||||
56
catalog-info.yaml
Normal file
56
catalog-info.yaml
Normal file
@@ -0,0 +1,56 @@
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: Component
|
||||
metadata:
|
||||
name: demo-app-1-v2
|
||||
title: My Application v2 1
|
||||
description: Application deployed via Humanitec Platform Orchestrator v2
|
||||
annotations:
|
||||
# --- Source Control ---
|
||||
gitea.kyndemo.live/project-slug: validate/demo-app-1-v2
|
||||
gitea.kyndemo.live/repo-slug: validate/demo-app-1-v2
|
||||
|
||||
# --- Kubernetes plugin: finds pods with label app=<component_id> across namespaces ---
|
||||
backstage.io/kubernetes-label-selector: app=demo-app-1-v2
|
||||
|
||||
# --- TechDocs: builds from docs/ directory in this repo ---
|
||||
backstage.io/techdocs-ref: dir:.
|
||||
|
||||
# --- Humanitec Platform Orchestrator v2 ---
|
||||
humanitec.dev/orgId: skillful-wild-chicken-2617
|
||||
humanitec.dev/projectId: demo-apps-1
|
||||
tags:
|
||||
- humanitec-v2
|
||||
- platform-orchestrator
|
||||
- score
|
||||
- azure
|
||||
- microservice
|
||||
links:
|
||||
- url: https://console.humanitec.dev/orgs/skillful-wild-chicken-2617/projects/demo-apps-1/environments/dev
|
||||
title: Humanitec Console
|
||||
icon: dashboard
|
||||
- url: https://gitea.kyndemo.live/validate/demo-app-1-v2
|
||||
title: Source Repository
|
||||
icon: github
|
||||
- url: https://gitea.kyndemo.live/validate/demo-app-1-v2/actions
|
||||
title: CI/CD Pipelines
|
||||
icon: code
|
||||
spec:
|
||||
type: service
|
||||
lifecycle: experimental
|
||||
owner: group:default/platform-engineering
|
||||
system: demo-app-1-v2-system
|
||||
---
|
||||
apiVersion: backstage.io/v1alpha1
|
||||
kind: System
|
||||
metadata:
|
||||
name: demo-app-1-v2-system
|
||||
title: My Application v2 1 System
|
||||
description: System grouping for My Application v2 1 and its dependencies
|
||||
annotations:
|
||||
humanitec.dev/orgId: skillful-wild-chicken-2617
|
||||
humanitec.dev/projectId: demo-apps-1
|
||||
tags:
|
||||
- humanitec-v2
|
||||
- azure
|
||||
spec:
|
||||
owner: group:default/platform-engineering
|
||||
54
docs/index.md
Normal file
54
docs/index.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# My Application v2 1
|
||||
|
||||
Application deployed via Humanitec Platform Orchestrator v2
|
||||
|
||||
## Overview
|
||||
|
||||
| Property | Value |
|
||||
|--------------|-----------------------------------------------------------------------------------------------|
|
||||
| **Owner** | `` |
|
||||
| **Org** | [skillful-wild-chicken-2617](https://app.humanitec.dev/skillful-wild-chicken-2617) |
|
||||
| **Project** | `demo-apps-1` |
|
||||
| **App** | `demo-app-1-v2` |
|
||||
| **Repo** | [validate/demo-app-1-v2](https:///validate/demo-app-1-v2) |
|
||||
|
||||
## Environments
|
||||
|
||||
| Environment | Link |
|
||||
|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **dev** | [Humanitec Console](https://app.humanitec.dev/skillful-wild-chicken-2617/projects/demo-apps-1/apps/demo-app-1-v2/envs/dev) |
|
||||
|
||||
## CI/CD
|
||||
|
||||
Build and deployment pipelines are managed via Gitea Actions.
|
||||
View runs in the **CI/CD** tab of this component in Backstage, or directly in the
|
||||
[demo-app-1-v2 repository](https:///validate/demo-app-1-v2/actions).
|
||||
|
||||
## Architecture
|
||||
|
||||
This service is deployed on **Azure AKS** via the Humanitec Platform Orchestrator.
|
||||
|
||||
- Workloads are scheduled in the `dev` namespace
|
||||
- Pods carry the label `app: demo-app-1-v2`
|
||||
- Kubernetes resources are visible in the **Kubernetes** tab
|
||||
|
||||
## Getting Started
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https:///validate/demo-app-1-v2
|
||||
cd demo-app-1-v2
|
||||
|
||||
# Build the image
|
||||
docker build -t demo-app-1-v2:local .
|
||||
|
||||
# Deploy via Score
|
||||
score-humanitec delta \
|
||||
--token "$HUMANITEC_TOKEN_V2" \
|
||||
--org "skillful-wild-chicken-2617" \
|
||||
--project "demo-apps-1" \
|
||||
--app "demo-app-1-v2" \
|
||||
--env dev \
|
||||
-f score.yaml \
|
||||
--deploy
|
||||
```
|
||||
9
mkdocs.yml
Normal file
9
mkdocs.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
site_name: My Application v2 1
|
||||
site_description: Application deployed via Humanitec Platform Orchestrator v2
|
||||
docs_dir: docs
|
||||
|
||||
nav:
|
||||
- Home: index.md
|
||||
|
||||
plugins:
|
||||
- techdocs-core
|
||||
45
score.yaml
Normal file
45
score.yaml
Normal file
@@ -0,0 +1,45 @@
|
||||
apiVersion: score.dev/v1b1
|
||||
metadata:
|
||||
# component_id is lowercase+hyphens — matches the catalog-info K8s label selector
|
||||
name: demo-app-1-v2
|
||||
labels:
|
||||
# Propagated to Deployment metadata.labels so the Backstage K8s plugin
|
||||
# can find the Deployment via label selector (app=<component_id>)
|
||||
app: demo-app-1-v2
|
||||
|
||||
containers:
|
||||
main:
|
||||
image: nginx:alpine
|
||||
# Uncomment to inject values from Humanitec resource outputs, e.g.:
|
||||
# variables:
|
||||
# APP_ENV: "${resources.env.values.APP_ENV}"
|
||||
# Uncomment to configure resource requests/limits:
|
||||
# resources:
|
||||
# requests: { cpu: 100m, memory: 128Mi }
|
||||
# limits: { cpu: 500m, memory: 512Mi }
|
||||
|
||||
service:
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
targetPort: 80
|
||||
|
||||
# Resources declare external dependencies resolved by Humanitec at deploy time.
|
||||
# Platform resource types available: environment, azure-blob, azure-keyvault-secret,
|
||||
# azure-service-bus, postgres, redis
|
||||
resources:
|
||||
env:
|
||||
type: environment
|
||||
# Uncomment to request an Azure Blob Storage container:
|
||||
# blob:
|
||||
# type: azure-blob
|
||||
#
|
||||
# Uncomment to request a Key Vault secret:
|
||||
# config:
|
||||
# type: azure-keyvault-secret
|
||||
# params:
|
||||
# secret_name: my-app-secret
|
||||
#
|
||||
# Uncomment to request a PostgreSQL database:
|
||||
# db:
|
||||
# type: postgres
|
||||
Reference in New Issue
Block a user