mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-01-11 19:56:44 +00:00
- Add Telemetry service entrypoint - Telemetry/Index.ts: app bootstrap, routes mounting, infrastructure init and Telemetry SDK init. - Unified queue + worker - Telemetry/Jobs/TelemetryIngest/ProcessTelemetry.ts: single worker that dispatches queued jobs to specific processors (logs, traces, metrics, syslog, fluent logs). - Telemetry/Services/Queue/TelemetryQueueService.ts: central queue API and job payload types. - Per-type Queue wrappers (LogsQueueService, MetricsQueueService, TracesQueueService, FluentLogsQueueService, SyslogQueueService). - OpenTelemetry ingestion middleware and proto support - Telemetry/Middleware/OtelRequestMiddleware.ts: detect OTLP endpoint (logs/traces/metrics), decode protobuf bodies using protobufjs and set product type. - Telemetry/ProtoFiles/OTel/v1/*.proto: include common.proto, logs.proto, metrics.proto, resource.proto, traces.proto for OTLP v1 messages. - Ingest services - Telemetry/Services/OtelLogsIngestService.ts: parse incoming OTLP logs, map attributes, convert timestamps, batch insert logs. - Telemetry/Services/OtelTracesIngestService.ts: parse OTLP traces, build span rows, extract exceptions, batch insert spans and exceptions, save telemetry exception summary. - Telemetry/Services/OtelMetricsIngestService.ts: parse OTLP metrics, normalize datapoints, batch insert metrics and index metric name -> service map. - Telemetry/Services/SyslogIngestService.ts: syslog ingestion endpoints, parser integration, map syslog fields to attributes and logs. - Telemetry/Services/FluentLogsIngestService.ts: ingest Fluentd style logs, normalize entries and insert into log backend. - Telemetry/Services/OtelIngestBaseService.ts: helpers to resolve service name from attributes/headers. - Syslog parser and utilities - Telemetry/Utils/SyslogParser.ts: robust RFC5424 and RFC3164 parser, structured data extraction and sanitization. - Telemetry/Tests/Utils/SyslogParser.test.ts: unit tests for parser behavior. - Telemetry exception utilities - Telemetry/Utils/Exception.ts: generate exception fingerprint and upsert telemetry exception status (saveOrUpdateTelemetryException). - Queue & job integration - New integration with Common/Server/Infrastructure/Queue and QueueWorker, job id generation and telemetry job types. - Telemetry services add ingestion jobs instead of processing synchronously. - Config, build and dev tooling - Add Telemetry/package.json, package-lock.json, tsconfig.json, nodemon.json, jest config. - New script configs and dependencies (protobufjs, ts-node, jest, nodemon, etc). - Docker / environment updates - docker-compose.base.yml, docker-compose.dev.yml, docker-compose.yml: rename service from open-telemetry-ingest -> telemetry and wire TELEMETRY_* envs. - config.example.env: rename and consolidate environment variables (OPEN_TELEMETRY_* -> TELEMETRY_*, update hostnames and ports). - Tests/Scripts/status-check.sh: update ready-check target to telemetry/status/ready. - Other - Telemetry/Services/Queue/*: export helpers and legacy-compatible job interface shims. - Memory cleanup and batching safeguards across ingest services. - Logging and capture spans added to key code paths. BREAKING CHANGES / MIGRATION NOTES: - Environment variables and docker service names changed: - Replace OPEN_TELEMETRY_... vars with TELEMETRY_... (PORT, HOSTNAME, CONCURRENCY, DISABLE_TELEMETRY, etc). - docker-compose entries moved from "open-telemetry-ingest" to "telemetry" and image name changed to oneuptime/telemetry. - Update any deployment automation and monitoring checks referencing the old service name or endpoints. - Consumers: OTLP endpoints and behavior remain supported, but ingestion is now queued and processed asynchronously. Testing / Running: - Install deps in Telemetry/ (npm install) after syncing Common workspace. - Run dev: npx nodemon (nodemon.json) or build & start using provided scripts. - Run tests with jest (Telemetry test suite includes SyslogParser unit tests). Files added/modified (high level): - Added many files under Telemetry/: Index, Jobs, Middleware, ProtoFiles, Services, Utils, Tests, package and config artifacts. - Modified docker-compose.* and config.example.env and status check script to use new TELEMETRY service/vars.
2761 lines
97 KiB
YAML
2761 lines
97 KiB
YAML
name: Push Release Images to Docker Hub and GitHub Container Registry
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- "release"
|
|
|
|
jobs:
|
|
generate-build-number:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
build_number: ${{ steps.buildnumber.outputs.build_number }}
|
|
steps:
|
|
- name: Generate build number
|
|
id: buildnumber
|
|
uses: onyxmueller/build-tag-number@v1.0.2
|
|
with:
|
|
token: ${{secrets.github_token}}
|
|
- run: echo "Build number is ${{ steps.buildnumber.outputs.build_number }}"
|
|
|
|
|
|
read-version:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
major_minor: ${{ steps.read.outputs.major_minor }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
- name: Read VERSION_PREFIX
|
|
id: read
|
|
run: |
|
|
VERSION_PREFIX=$(cat VERSION_PREFIX | tr -d ' \n')
|
|
echo "major_minor=$VERSION_PREFIX" >> $GITHUB_OUTPUT
|
|
echo "Using version prefix: $VERSION_PREFIX"
|
|
|
|
|
|
|
|
helm-chart-deploy:
|
|
runs-on: ubuntu-latest
|
|
needs: [generate-build-number, read-version]
|
|
env:
|
|
CI_COMMIT_AUTHOR: Continuous Integration
|
|
steps:
|
|
|
|
- name: Install Helm
|
|
run: curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- name: Build and Package Helm chart
|
|
run: |
|
|
cd ..
|
|
echo '${{ secrets.GPG_PRIVATE_KEY }}' > private.key
|
|
gpg --import private.key || true
|
|
rm private.key
|
|
echo "GPG key imported successfully"
|
|
gpg --export-secret-keys >~/.gnupg/secring.gpg
|
|
echo "GPG key exported successfully"
|
|
eval `ssh-agent -s`
|
|
ssh-add - <<< '${{ secrets.HELM_CHART_GITHUB_REPO_DEPLOY_KEY }}'
|
|
git clone git@github.com:OneUptime/helm-chart.git
|
|
cd oneuptime/HelmChart/Public
|
|
helm lint oneuptime
|
|
helm template oneuptime --values oneuptime/values.yaml
|
|
helm package --sign --key 'key@oneuptime.com' --keyring ~/.gnupg/secring.gpg oneuptime --version ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}} --app-version ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
echo "Helm Chart Package created successfully"
|
|
cd ..
|
|
ls
|
|
echo "Copying the package to helm-chart repo"
|
|
rm -r ../../helm-chart/oneuptime
|
|
cp -r ./Public/* ../../helm-chart
|
|
echo "Package copied successfully"
|
|
cd .. && cd .. && cd helm-chart
|
|
echo "Updating helm-chart repo"
|
|
git config --global user.name "${{ env.CI_COMMIT_AUTHOR }}"
|
|
git config --global user.email "hello@oneuptime.com"
|
|
echo "Git config set successfully"
|
|
echo "Adding the package to helm-chart repo"
|
|
helm repo index .
|
|
git add -A
|
|
git commit -m "Helm Chart Release ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
git push origin master
|
|
|
|
publish-mcp-server:
|
|
runs-on: ubuntu-latest
|
|
needs: [generate-build-number, read-version, publish-npm-packages]
|
|
env:
|
|
CI_PIPELINE_ID: ${{ github.run_number }}
|
|
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
|
|
permissions:
|
|
contents: write # For creating releases
|
|
packages: write # For publishing packages
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # Full history for changelog generation
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
cache: 'npm'
|
|
|
|
- name: Install Common dependencies
|
|
run: cd Common && npm install
|
|
|
|
- name: Install Script dependencies
|
|
run: cd Scripts && npm install
|
|
|
|
- name: Determine version
|
|
id: version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Publishing MCP server version: $VERSION"
|
|
|
|
- name: Verify MCP server directory
|
|
run: |
|
|
MCP_DIR="./MCP"
|
|
|
|
if [ ! -d "$MCP_DIR" ]; then
|
|
echo "❌ MCP server directory not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ MCP server directory found"
|
|
echo "📊 Source files:"
|
|
find "$MCP_DIR" -type f -name "*.ts" -o -name "*.js" -o -name "*.json" | wc -l
|
|
echo "📁 Directory structure:"
|
|
ls -la "$MCP_DIR"
|
|
|
|
- name: Setup npm authentication
|
|
run: |
|
|
# Clean up any existing npm configuration that might cause warnings
|
|
rm -f ~/.npmrc
|
|
# Create npmrc file with authentication
|
|
touch ~/.npmrc
|
|
echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" >> ~/.npmrc
|
|
echo "//registry.npmjs.org/:email=npm@oneuptime.com" >> ~/.npmrc
|
|
echo "✅ npm authentication configured"
|
|
|
|
- name: Update package version
|
|
run: |
|
|
cd MCP
|
|
npm version ${{ steps.version.outputs.version }} --no-git-tag-version
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
cd MCP
|
|
npm update @oneuptime/common
|
|
npm install
|
|
|
|
- name: Build MCP server
|
|
run: |
|
|
cd MCP
|
|
npm run build
|
|
|
|
- name: Run tests
|
|
run: |
|
|
cd MCP
|
|
npm test || echo "No tests found or tests failed, continuing..."
|
|
|
|
- name: Verify package before publish
|
|
run: |
|
|
cd MCP
|
|
echo "📦 Package information:"
|
|
set +e
|
|
VERIFY_OUTPUT=$(npm publish --dry-run 2>&1)
|
|
VERIFY_EXIT=$?
|
|
set -e
|
|
echo "$VERIFY_OUTPUT"
|
|
if [ $VERIFY_EXIT -ne 0 ]; then
|
|
if echo "$VERIFY_OUTPUT" | grep -q "You cannot publish over the previously published versions"; then
|
|
echo "⚠️ npm publish --dry-run skipped: version already published"
|
|
else
|
|
echo "❌ npm publish --dry-run failed"
|
|
exit $VERIFY_EXIT
|
|
fi
|
|
fi
|
|
echo "📋 Package.json bin configuration:"
|
|
cat package.json | grep -A 5 -B 5 '"bin"'
|
|
echo "📁 Build directory contents:"
|
|
ls -la build/
|
|
|
|
- name: Publish to npm
|
|
run: |
|
|
cd MCP
|
|
set +e
|
|
PUBLISH_OUTPUT=$(npm publish --access public 2>&1)
|
|
PUBLISH_EXIT=$?
|
|
set -e
|
|
echo "$PUBLISH_OUTPUT"
|
|
if [ $PUBLISH_EXIT -ne 0 ]; then
|
|
if echo "$PUBLISH_OUTPUT" | grep -q "You cannot publish over the previously published versions"; then
|
|
echo "⚠️ npm publish skipped: version already published"
|
|
else
|
|
echo "❌ npm publish failed"
|
|
exit $PUBLISH_EXIT
|
|
fi
|
|
else
|
|
echo "✅ Published @oneuptime/mcp-server@${{ steps.version.outputs.version }} to npm"
|
|
fi
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push Docker images
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{ steps.version.outputs.version }}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file ./MCP/Dockerfile.tpl \
|
|
--tag oneuptime/mcp-server:${VERSION} \
|
|
--tag ghcr.io/oneuptime/mcp-server:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
--push .
|
|
docker buildx build \
|
|
--no-cache \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--file ./MCP/Dockerfile.tpl \
|
|
--tag oneuptime/mcp-server:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/mcp-server:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
--push .
|
|
echo "✅ Pushed Docker images to Docker Hub and GitHub Container Registry"
|
|
|
|
- name: Upload MCP server artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: mcp-server-${{ steps.version.outputs.version }}
|
|
path: ./MCP/
|
|
retention-days: 90
|
|
|
|
nginx-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/nginx
|
|
ghcr.io/oneuptime/nginx
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Nginx/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/nginx:${VERSION} \
|
|
--tag ghcr.io/oneuptime/nginx:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Nginx/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/nginx:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/nginx:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
e2e-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/e2e
|
|
ghcr.io/oneuptime/e2e
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy e2e.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./E2E/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/e2e:${VERSION} \
|
|
--tag ghcr.io/oneuptime/e2e:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./E2E/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/e2e:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/e2e:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
isolated-vm-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/isolated-vm
|
|
ghcr.io/oneuptime/isolated-vm
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy isolated-vm.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./IsolatedVM/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/isolated-vm:${VERSION} \
|
|
--tag ghcr.io/oneuptime/isolated-vm:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./IsolatedVM/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/isolated-vm:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/isolated-vm:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
home-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/home
|
|
ghcr.io/oneuptime/home
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy isolated-vm.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Home/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/home:${VERSION} \
|
|
--tag ghcr.io/oneuptime/home:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Home/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/home:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/home:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
|
|
test-server-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/test-server
|
|
ghcr.io/oneuptime/test-server
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy test-server.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./TestServer/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/test-server:${VERSION} \
|
|
--tag ghcr.io/oneuptime/test-server:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./TestServer/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/test-server:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/test-server:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
otel-collector-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/otel-collector
|
|
ghcr.io/oneuptime/otel-collector
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy otel-collector.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./OTelCollector/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/otel-collector:${VERSION} \
|
|
--tag ghcr.io/oneuptime/otel-collector:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./OTelCollector/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/otel-collector:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/otel-collector:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
status-page-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/status-page
|
|
ghcr.io/oneuptime/status-page
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy status-page.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./StatusPage/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/status-page:${VERSION} \
|
|
--tag ghcr.io/oneuptime/status-page:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./StatusPage/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/status-page:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/status-page:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
test-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/test
|
|
ghcr.io/oneuptime/test
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy test.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Tests/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/test:${VERSION} \
|
|
--tag ghcr.io/oneuptime/test:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Tests/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/test:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/test:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
probe-ingest-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/probe-ingest
|
|
ghcr.io/oneuptime/probe-ingest
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy probe-ingest.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./ProbeIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/probe-ingest:${VERSION} \
|
|
--tag ghcr.io/oneuptime/probe-ingest:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./ProbeIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/probe-ingest:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/probe-ingest:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
server-monitor-ingest-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/server-monitor-ingest
|
|
ghcr.io/oneuptime/server-monitor-ingest
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy probe-ingest.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./ServerMonitorIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/server-monitor-ingest:${VERSION} \
|
|
--tag ghcr.io/oneuptime/server-monitor-ingest:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./ServerMonitorIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/server-monitor-ingest:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/server-monitor-ingest:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
telemetry-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/telemetry
|
|
ghcr.io/oneuptime/telemetry
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy telemetry.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Telemetry/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/telemetry:${VERSION} \
|
|
--tag ghcr.io/oneuptime/telemetry:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Telemetry/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/telemetry:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/telemetry:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
incoming-request-ingest-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/incoming-request-ingest
|
|
ghcr.io/oneuptime/incoming-request-ingest
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy incoming-request-ingest.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./IncomingRequestIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/incoming-request-ingest:${VERSION} \
|
|
--tag ghcr.io/oneuptime/incoming-request-ingest:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./IncomingRequestIngest/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/incoming-request-ingest:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/incoming-request-ingest:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
probe-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/probe
|
|
ghcr.io/oneuptime/probe
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy probe.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Probe/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/probe:${VERSION} \
|
|
--tag ghcr.io/oneuptime/probe:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Probe/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/probe:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/probe:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
admin-dashboard-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/admin-dashboard
|
|
ghcr.io/oneuptime/admin-dashboard
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy admin-dashboard.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./AdminDashboard/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/admin-dashboard:${VERSION} \
|
|
--tag ghcr.io/oneuptime/admin-dashboard:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./AdminDashboard/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/admin-dashboard:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/admin-dashboard:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
dashboard-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/dashboard
|
|
ghcr.io/oneuptime/dashboard
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy dashboard.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Dashboard/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/dashboard:${VERSION} \
|
|
--tag ghcr.io/oneuptime/dashboard:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Dashboard/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/dashboard:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/dashboard:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
app-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/app
|
|
ghcr.io/oneuptime/app
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy app.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./App/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/app:${VERSION} \
|
|
--tag ghcr.io/oneuptime/app:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./App/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/app:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/app:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
copilot-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/copilot
|
|
ghcr.io/oneuptime/copilot
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy app.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Copilot/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/copilot:${VERSION} \
|
|
--tag ghcr.io/oneuptime/copilot:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Copilot/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/copilot:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/copilot:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
accounts-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/accounts
|
|
ghcr.io/oneuptime/accounts
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy accounts.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Accounts/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/accounts:${VERSION} \
|
|
--tag ghcr.io/oneuptime/accounts:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Accounts/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/accounts:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/accounts:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
publish-npm-packages:
|
|
runs-on: ubuntu-latest
|
|
needs: [generate-build-number, read-version]
|
|
env:
|
|
CI_PIPELINE_ID: ${{github.run_number}}
|
|
NPM_AUTH_TOKEN: ${{secrets.NPM_AUTH_TOKEN}}
|
|
PACKAGE_VERSION: ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
- name: Preinstall
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
- name: Publish NPM Packages
|
|
run: bash ./Scripts/NPM/PublishAllPackages.sh
|
|
|
|
|
|
llm-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
# Docker compose needs a lot of space to build images, so we need to free up some space first in the GitHub Actions runner
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
# this might remove tools that are actually needed,
|
|
# if set to "true" but frees about 6 GB
|
|
tool-cache: false
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: true
|
|
docker-images: true
|
|
swap-storage: true
|
|
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/llm
|
|
ghcr.io/oneuptime/llm
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
# - name: Setup Git LFS
|
|
# run: git lfs install
|
|
|
|
# # Cannot do this, no space on the gitHub standard runner. We need to use the large runner which is selfhosted
|
|
# - name: Download the Model from Hugging Face
|
|
# run: mkdir -p ./LLM/Models && cd ./LLM/Models && git clone https://${{ secrets.HUGGING_FACE_USERNAME }}:${{ secrets.HUGGING_FACE_PASSWORD }}@huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./LLM/Dockerfile \
|
|
--platform linux/amd64 \
|
|
--push \
|
|
--tag oneuptime/llm:${VERSION} \
|
|
--tag ghcr.io/oneuptime/llm:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
./LLM
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./LLM/Dockerfile \
|
|
--platform linux/amd64 \
|
|
--push \
|
|
--tag oneuptime/llm:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/llm:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
./LLM
|
|
|
|
docs-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/docs
|
|
ghcr.io/oneuptime/docs
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Docs/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/docs:${VERSION} \
|
|
--tag ghcr.io/oneuptime/docs:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Docs/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/docs:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/docs:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
|
|
worker-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/worker
|
|
ghcr.io/oneuptime/worker
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Worker/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/worker:${VERSION} \
|
|
--tag ghcr.io/oneuptime/worker:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Worker/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/worker:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/worker:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
|
|
workflow-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/workflow
|
|
ghcr.io/oneuptime/workflow
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Workflow/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/workflow:${VERSION} \
|
|
--tag ghcr.io/oneuptime/workflow:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./Workflow/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/workflow:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/workflow:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
|
|
|
|
publish-terraform-provider:
|
|
runs-on: ubuntu-latest
|
|
needs: [generate-build-number, read-version]
|
|
env:
|
|
CI_PIPELINE_ID: ${{github.run_number}}
|
|
GITHUB_TOKEN: ${{ secrets.SIMLARSEN_GITHUB_PAT }}
|
|
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
|
|
TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY: ${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}
|
|
permissions:
|
|
contents: write # For creating releases
|
|
packages: write # For publishing packages
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # Full history for changelog generation
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 'latest'
|
|
cache: 'npm'
|
|
|
|
- name: Setup Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.21'
|
|
cache: true
|
|
|
|
- name: Install GoReleaser
|
|
uses: goreleaser/goreleaser-action@v5
|
|
with:
|
|
install-only: true
|
|
|
|
- name: Determine version
|
|
id: version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Publishing Terraform provider version: $VERSION"
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
npm install
|
|
if [ -d "Common" ]; then cd Common && npm install && cd ..; fi
|
|
if [ -d "Scripts" ]; then cd Scripts && npm install && cd ..; fi
|
|
|
|
- name: Import GPG key
|
|
run: |
|
|
echo '${{ secrets.GPG_PRIVATE_KEY }}' > private.key
|
|
gpg --import private.key || true
|
|
rm private.key
|
|
echo "GPG key imported successfully"
|
|
gpg --export-secret-keys >~/.gnupg/secring.gpg
|
|
echo "GPG key exported successfully"
|
|
|
|
- name: Generate Terraform provider
|
|
run: npm run publish-terraform-provider -- --version "${{ steps.version.outputs.version }}" --github-token "${{ secrets.SIMLARSEN_GITHUB_PAT }}" --github-repo-deploy-key "${{ secrets.TERRAFORM_PROVIDER_GITHUB_REPO_DEPLOY_KEY }}"
|
|
|
|
|
|
|
|
api-reference-docker-image-deploy:
|
|
needs: [generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
|
|
- name: Docker Meta
|
|
id: meta
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: |
|
|
oneuptime/api-reference
|
|
ghcr.io/oneuptime/api-reference
|
|
tags: |
|
|
type=raw,value=release,enable=true
|
|
type=semver,value=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}},pattern={{version}},enable=true
|
|
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v2
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v2
|
|
|
|
- name: Generate Dockerfile from Dockerfile.tpl
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 10
|
|
max_attempts: 3
|
|
command: npm run prerun
|
|
|
|
# Build and deploy nginx.
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Build and push
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 45
|
|
max_attempts: 3
|
|
command: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./APIReference/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/api-reference:${VERSION} \
|
|
--tag ghcr.io/oneuptime/api-reference:${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=false \
|
|
.
|
|
docker buildx build \
|
|
--no-cache \
|
|
--file ./APIReference/Dockerfile \
|
|
--platform linux/amd64,linux/arm64 \
|
|
--push \
|
|
--tag oneuptime/api-reference:enterprise-${VERSION} \
|
|
--tag ghcr.io/oneuptime/api-reference:enterprise-${VERSION} \
|
|
--build-arg GIT_SHA=${{ github.sha }} \
|
|
--build-arg APP_VERSION=${VERSION} \
|
|
--build-arg IS_ENTERPRISE_EDITION=true \
|
|
.
|
|
|
|
push-release-tags:
|
|
name: Push release tags before GitHub release
|
|
needs:
|
|
- read-version
|
|
- generate-build-number
|
|
- publish-mcp-server
|
|
- nginx-docker-image-deploy
|
|
- e2e-docker-image-deploy
|
|
- isolated-vm-docker-image-deploy
|
|
- home-docker-image-deploy
|
|
- test-server-docker-image-deploy
|
|
- otel-collector-docker-image-deploy
|
|
- status-page-docker-image-deploy
|
|
- test-docker-image-deploy
|
|
- probe-ingest-docker-image-deploy
|
|
- server-monitor-ingest-docker-image-deploy
|
|
- telemetry-docker-image-deploy
|
|
- incoming-request-ingest-docker-image-deploy
|
|
- probe-docker-image-deploy
|
|
- admin-dashboard-docker-image-deploy
|
|
- dashboard-docker-image-deploy
|
|
- app-docker-image-deploy
|
|
- copilot-docker-image-deploy
|
|
- accounts-docker-image-deploy
|
|
- llm-docker-image-deploy
|
|
- docs-docker-image-deploy
|
|
- worker-docker-image-deploy
|
|
- workflow-docker-image-deploy
|
|
- api-reference-docker-image-deploy
|
|
- test-e2e-release-saas
|
|
- test-e2e-release-self-hosted
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
image: [
|
|
"mcp-server",
|
|
"nginx",
|
|
"e2e",
|
|
"isolated-vm",
|
|
"home",
|
|
"test-server",
|
|
"otel-collector",
|
|
"status-page",
|
|
"test",
|
|
"probe-ingest",
|
|
"server-monitor-ingest",
|
|
"telemetry",
|
|
"incoming-request-ingest",
|
|
"probe",
|
|
"admin-dashboard",
|
|
"dashboard",
|
|
"app",
|
|
"copilot",
|
|
"accounts",
|
|
"llm",
|
|
"docs",
|
|
"worker",
|
|
"workflow",
|
|
"api-reference"
|
|
]
|
|
steps:
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Login to Docker Hub
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login --username "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: nick-fields/retry@v3
|
|
with:
|
|
timeout_minutes: 5
|
|
max_attempts: 3
|
|
command: |
|
|
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username "${{ github.repository_owner }}" --password-stdin
|
|
|
|
- name: Create Docker Hub release tag from version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx imagetools create \
|
|
--tag oneuptime/${{ matrix.image }}:release \
|
|
ghcr.io/oneuptime/${{ matrix.image }}:${VERSION}
|
|
|
|
- name: Create GHCR release tag from version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx imagetools create \
|
|
--tag ghcr.io/oneuptime/${{ matrix.image }}:release \
|
|
ghcr.io/oneuptime/${{ matrix.image }}:${VERSION}
|
|
|
|
- name: Create Docker Hub enterprise release tag from version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx imagetools create \
|
|
--tag oneuptime/${{ matrix.image }}:enterprise-release \
|
|
ghcr.io/oneuptime/${{ matrix.image }}:enterprise-${VERSION}
|
|
|
|
- name: Create GHCR enterprise release tag from version
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
docker buildx imagetools create \
|
|
--tag ghcr.io/oneuptime/${{ matrix.image }}:enterprise-release \
|
|
ghcr.io/oneuptime/${{ matrix.image }}:enterprise-${VERSION}
|
|
|
|
|
|
|
|
|
|
test-e2e-release-saas:
|
|
runs-on: ubuntu-latest
|
|
needs: [telemetry-docker-image-deploy, publish-mcp-server, copilot-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, read-version, nginx-docker-image-deploy, incoming-request-ingest-docker-image-deploy]
|
|
env:
|
|
CI_PIPELINE_ID: ${{github.run_number}}
|
|
steps:
|
|
# Docker compose needs a lot of space to build images, so we need to free up some space first in the GitHub Actions runner
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
# this might remove tools that are actually needed,
|
|
# if set to "true" but frees about 6 GB
|
|
tool-cache: true
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: true
|
|
docker-images: true
|
|
swap-storage: true
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
- name: Preinstall and enable billing
|
|
run: |
|
|
set -euo pipefail
|
|
npm run prerun
|
|
bash ./Tests/Scripts/enable-billing-env-var.sh
|
|
- name: Pin APP_TAG to versioned release
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
if [ -f config.env ]; then
|
|
if grep -q '^APP_TAG=' config.env; then
|
|
sed -i "s/^APP_TAG=.*/APP_TAG=${VERSION}/" config.env
|
|
else
|
|
echo "APP_TAG=${VERSION}" >> config.env
|
|
fi
|
|
else
|
|
echo "APP_TAG=${VERSION}" > config.env
|
|
fi
|
|
- name: Start Server with version tag
|
|
run: |
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
docker compose up --remove-orphans -d
|
|
npm run status-check
|
|
- name: Wait for server to start
|
|
run: bash ./Tests/Scripts/status-check.sh http://localhost
|
|
- name: Pull E2E test image
|
|
run: |
|
|
set -euo pipefail
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
docker compose -f docker-compose.e2e.yml pull e2e
|
|
- name: Run E2E Tests. Run docker container e2e in docker compose file
|
|
run: |
|
|
set -euo pipefail
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
trap 'docker compose -f docker-compose.e2e.yml down -v || true' EXIT
|
|
if ! docker compose -f docker-compose.e2e.yml up --exit-code-from e2e --abort-on-container-exit e2e; then
|
|
docker compose -f docker-compose.e2e.yml logs e2e
|
|
exit 1
|
|
fi
|
|
- name: Upload test results
|
|
uses: actions/upload-artifact@v4
|
|
# Run this on failure
|
|
if: failure()
|
|
with:
|
|
# Name of the artifact to upload.
|
|
# Optional. Default is 'artifact'
|
|
name: test-results-${{ github.job }}-${{ github.run_attempt }}
|
|
|
|
# A file, directory or wildcard pattern that describes what to upload
|
|
# Required.
|
|
path: |
|
|
./E2E
|
|
|
|
|
|
# Duration after which artifact will expire in days. 0 means using default retention.
|
|
# Minimum 1 day.
|
|
# Maximum 90 days unless changed from the repository settings page.
|
|
# Optional. Defaults to repository settings.
|
|
retention-days: 7
|
|
|
|
|
|
test-e2e-release-self-hosted:
|
|
runs-on: ubuntu-latest
|
|
# After all the jobs runs
|
|
needs: [telemetry-docker-image-deploy, publish-mcp-server, copilot-docker-image-deploy, incoming-request-ingest-docker-image-deploy, docs-docker-image-deploy, api-reference-docker-image-deploy, workflow-docker-image-deploy, llm-docker-image-deploy, accounts-docker-image-deploy, admin-dashboard-docker-image-deploy, app-docker-image-deploy, dashboard-docker-image-deploy, probe-ingest-docker-image-deploy, server-monitor-ingest-docker-image-deploy, isolated-vm-docker-image-deploy, home-docker-image-deploy, worker-docker-image-deploy, otel-collector-docker-image-deploy, probe-docker-image-deploy, status-page-docker-image-deploy, test-docker-image-deploy, test-server-docker-image-deploy, publish-npm-packages, e2e-docker-image-deploy, helm-chart-deploy, generate-build-number, read-version, nginx-docker-image-deploy]
|
|
env:
|
|
CI_PIPELINE_ID: ${{github.run_number}}
|
|
steps:
|
|
# Docker compose needs a lot of space to build images, so we need to free up some space first in the GitHub Actions runner
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
# this might remove tools that are actually needed,
|
|
# if set to "true" but frees about 6 GB
|
|
tool-cache: true
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
large-packages: true
|
|
docker-images: true
|
|
swap-storage: true
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: latest
|
|
- name: Preinstall
|
|
run: |
|
|
set -euo pipefail
|
|
npm run prerun
|
|
- name: Pin APP_TAG to versioned release
|
|
run: |
|
|
VERSION="${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
if [ -f config.env ]; then
|
|
if grep -q '^APP_TAG=' config.env; then
|
|
sed -i "s/^APP_TAG=.*/APP_TAG=${VERSION}/" config.env
|
|
else
|
|
echo "APP_TAG=${VERSION}" >> config.env
|
|
fi
|
|
else
|
|
echo "APP_TAG=${VERSION}" > config.env
|
|
fi
|
|
- name: Start Server with version tag
|
|
run: |
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
docker compose up --remove-orphans -d
|
|
npm run status-check
|
|
- name: Wait for server to start
|
|
run: bash ./Tests/Scripts/status-check.sh http://localhost
|
|
- name: Pull E2E test image
|
|
run: |
|
|
set -euo pipefail
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
docker compose -f docker-compose.e2e.yml pull e2e
|
|
- name: Run E2E Tests. Run docker container e2e in docker compose file
|
|
run: |
|
|
set -euo pipefail
|
|
export $(grep -v '^#' config.env | xargs)
|
|
export APP_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
trap 'docker compose -f docker-compose.e2e.yml down -v || true' EXIT
|
|
if ! docker compose -f docker-compose.e2e.yml up --exit-code-from e2e --abort-on-container-exit e2e; then
|
|
docker compose -f docker-compose.e2e.yml logs e2e
|
|
exit 1
|
|
fi
|
|
- name: Upload test results
|
|
uses: actions/upload-artifact@v4
|
|
# Run this on failure
|
|
if: failure()
|
|
with:
|
|
# Name of the artifact to upload.
|
|
# Optional. Default is 'artifact'
|
|
name: test-results-${{ github.job }}-${{ github.run_attempt }}
|
|
|
|
# A file, directory or wildcard pattern that describes what to upload
|
|
# Required.
|
|
path: |
|
|
./E2E
|
|
|
|
|
|
# Duration after which artifact will expire in days. 0 means using default retention.
|
|
# Minimum 1 day.
|
|
# Maximum 90 days unless changed from the repository settings page.
|
|
# Optional. Defaults to repository settings.
|
|
retention-days: 7
|
|
|
|
draft-github-release:
|
|
name: Create draft GitHub release
|
|
needs: [test-e2e-release-saas, test-e2e-release-self-hosted, generate-build-number, read-version, push-release-tags]
|
|
runs-on: ubuntu-latest
|
|
if: github.ref == 'refs/heads/release'
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
- run: echo "${{needs.generate-build-number.outputs.build_number}}"
|
|
- name: "Build Changelog"
|
|
id: build_changelog
|
|
uses: mikepenz/release-changelog-builder-action@v4.2.0
|
|
with:
|
|
configuration: "./Scripts/Release/ChangelogConfig.json"
|
|
- run: echo "Changelog:"
|
|
- run: echo "${{steps.build_changelog.outputs.changelog}}"
|
|
- name: Fallback to commit messages if changelog empty
|
|
id: fallback_changelog
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
CHANGELOG_CONTENT="${{steps.build_changelog.outputs.changelog}}"
|
|
OLD_PLACEHOLDER="No significant changes were made. We have just fixed minor bugs for this release. You can find the detailed information in the commit history."
|
|
NEW_PLACEHOLDER="(auto) No categorized pull requests. Fallback will list raw commit messages."
|
|
if echo "$CHANGELOG_CONTENT" | grep -Fq "$OLD_PLACEHOLDER" || echo "$CHANGELOG_CONTENT" | grep -Fq "$NEW_PLACEHOLDER"; then
|
|
echo "Detected empty placeholder changelog. Building commit list fallback."
|
|
# Find previous tag (skip the most recent tag which might be for an older release). If none, include all commits.
|
|
if prev_tag=$(git describe --tags --abbrev=0 $(git rev-list --tags --skip=1 --max-count=1) 2>/dev/null); then
|
|
echo "Previous tag: $prev_tag"
|
|
commits=$(git log --pretty=format:'- %s (%h)' "$prev_tag"..HEAD)
|
|
else
|
|
echo "No previous tag found; using full commit history on this branch."
|
|
commits=$(git log --pretty=format:'- %s (%h)')
|
|
fi
|
|
# If still empty (e.g., no commits), keep placeholder to avoid empty body.
|
|
if [ -z "$commits" ]; then
|
|
commits="(no commits found)"
|
|
fi
|
|
{
|
|
echo "changelog<<EOF"
|
|
echo "## Commit Messages"
|
|
echo ""
|
|
echo "$commits"
|
|
echo "EOF"
|
|
} >> "$GITHUB_OUTPUT"
|
|
else
|
|
# Pass through original changelog
|
|
{
|
|
echo "changelog<<EOF"
|
|
echo "$CHANGELOG_CONTENT"
|
|
echo "EOF"
|
|
} >> "$GITHUB_OUTPUT"
|
|
fi
|
|
- uses: ncipollo/release-action@v1
|
|
with:
|
|
tag: "${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}"
|
|
artifactErrorsFailBuild: true
|
|
draft: true
|
|
allowUpdates: true
|
|
prerelease: false
|
|
body: |
|
|
${{steps.fallback_changelog.outputs.changelog}}
|
|
|
|
|
|
infrastructure-agent-deploy:
|
|
needs: [draft-github-release, generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.ref }}
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v4
|
|
|
|
- name: Install GoReleaser
|
|
uses: goreleaser/goreleaser-action@v6.1.0
|
|
with:
|
|
install-only: true
|
|
|
|
- name: GoReleaser Version
|
|
run: goreleaser -v
|
|
|
|
# This tool is used to generate .rpm and .deb packages
|
|
- name: Install NFPM
|
|
run: go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest
|
|
|
|
- name: Show GoReleaser version
|
|
run: goreleaser -v
|
|
|
|
- name: Run GoReleaser
|
|
run: cd InfrastructureAgent && export GORELEASER_CURRENT_TAG=${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}} && goreleaser release --clean --snapshot
|
|
|
|
- name: Release MSI Images
|
|
run: cd InfrastructureAgent && bash build-msi.sh ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
|
|
# Upload binaries to github release
|
|
- name: Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: |
|
|
InfrastructureAgent/dist/*
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
draft: true
|
|
prerelease: false
|
|
tag_name: ${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}
|
|
|
|
|
|
finalize-github-release:
|
|
name: Publish GitHub release
|
|
needs: [infrastructure-agent-deploy, generate-build-number, read-version]
|
|
runs-on: ubuntu-latest
|
|
if: github.ref == 'refs/heads/release'
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- name: Publish release
|
|
uses: actions/github-script@v7
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
const tag = '${{needs.read-version.outputs.major_minor}}.${{needs.generate-build-number.outputs.build_number}}';
|
|
try {
|
|
const releases = await github.paginate(github.rest.repos.listReleases, {
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
per_page: 100,
|
|
});
|
|
|
|
const release = releases.find((item) => item.tag_name === tag);
|
|
|
|
if (!release) {
|
|
throw new Error(`Release with tag ${tag} not found in repository ${context.repo.owner}/${context.repo.repo}`);
|
|
}
|
|
|
|
await github.rest.repos.updateRelease({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
release_id: release.id,
|
|
draft: false,
|
|
prerelease: false,
|
|
make_latest: 'true',
|
|
});
|
|
|
|
console.log(`Published release for ${tag}`);
|
|
} catch (error) {
|
|
throw new Error(`Failed to publish release for tag ${tag}: ${error.message ?? error}`);
|
|
}
|
|
|