quarkshologridledger/.forgejo/workflows/infra.yml

82 lines
2.3 KiB
YAML

name: Infrastructure
on:
push:
branches: [main]
tags: ['v*']
paths: ['infra/**']
pull_request:
branches: [main]
paths: ['infra/**']
jobs:
plan:
runs-on: docker
steps:
- uses: actions/checkout@v4
- name: Setup OpenTofu
uses: opentofu/setup-opentofu@v1
- name: Set environment target
id: target
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
echo "env_name=production" >> $GITHUB_OUTPUT
else
echo "env_name=staging" >> $GITHUB_OUTPUT
fi
- name: Init and Plan
working-directory: infra
env:
HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
ENV_NAME: ${{ steps.target.outputs.env_name }}
TF_VAR_hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
TF_VAR_ssh_public_key: ${{ secrets.SSH_PUBLIC_KEY }}
TF_VAR_domain: "holo-grid.bar"
TF_VAR_forgejo_domain: "git.holo-grid.bar"
run: |
tofu init
tofu workspace select $ENV_NAME || tofu workspace new $ENV_NAME
tofu plan -out=tfplan
- name: Upload plan artifact
if: github.event_name == 'pull_request'
uses: actions/upload-artifact@v4
with:
name: tfplan
path: infra/tfplan
apply:
runs-on: docker
needs: plan
if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) && github.event_name == 'push'
steps:
- uses: actions/checkout@v4
- name: Setup OpenTofu
uses: opentofu/setup-opentofu@v1
- name: Set environment target
id: target
run: |
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
echo "env_name=production" >> $GITHUB_OUTPUT
else
echo "env_name=staging" >> $GITHUB_OUTPUT
fi
- name: Init and Apply
working-directory: infra
env:
HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }}
ENV_NAME: ${{ steps.target.outputs.env_name }}
TF_VAR_hcloud_token: ${{ secrets.HCLOUD_TOKEN }}
TF_VAR_ssh_public_key: ${{ secrets.SSH_PUBLIC_KEY }}
TF_VAR_domain: "holo-grid.bar"
TF_VAR_forgejo_domain: "git.holo-grid.bar"
run: |
tofu init
tofu workspace select $ENV_NAME || tofu workspace new $ENV_NAME
tofu apply -auto-approve