-
Notifications
You must be signed in to change notification settings - Fork 7
126 lines (117 loc) · 4.96 KB
/
Copy pathdashboard.yml
File metadata and controls
126 lines (117 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
name: Docker Publish Dashboard
permissions:
contents: write
packages: write
on:
push:
branches: [main]
tags: ['dashboard-v*']
jobs:
check:
runs-on: ubuntu-latest
outputs:
has_changes: ${{ steps.check_for_changes.outputs.has_changes }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 3
- uses: actions/setup-node@v3
with:
node-version: '22.14.0'
- name: Install turbo
run: npm install -g turbo@2.4.4 && npm install -g turbo-ignore
- name: Check for changes
id: check_for_changes
run: |
if [[ "${GITHUB_REF}" == refs/tags/dashboard-v* ]]; then
echo "has_changes=true" >> "$GITHUB_OUTPUT"
exit 0
fi
npx turbo-ignore dashboard --fallback=HEAD^1 && echo "has_changes=false" >> "$GITHUB_OUTPUT" || echo "has_changes=true" >> "$GITHUB_OUTPUT"
build:
runs-on: ubuntu-latest
needs: check
if: needs.check.outputs.has_changes == 'true'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 3
- name: Install turbo
run: npm install -g turbo@^2
- name: Login to Docker
run: |
echo "${{ github.token }}" | docker login https://ghcr.io -u ${GITHUB_ACTOR} --password-stdin
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Resolve release tags
id: release_meta
run: |
if [[ "${GITHUB_REF}" == refs/tags/dashboard-v* ]]; then
VERSION="${GITHUB_REF_NAME#dashboard-v}"
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid release tag format: ${GITHUB_REF_NAME}. Expected dashboard-vX.Y.Z"
exit 1
fi
IFS='.' read -r MAJOR MINOR PATCH <<< "${VERSION}"
echo "is_release=true" >> "$GITHUB_OUTPUT"
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
echo "major=${MAJOR}" >> "$GITHUB_OUTPUT"
echo "minor=${MINOR}" >> "$GITHUB_OUTPUT"
if [ "${PATCH}" -eq 0 ]; then
echo "is_patch=false" >> "$GITHUB_OUTPUT"
else
echo "is_patch=true" >> "$GITHUB_OUTPUT"
fi
exit 0
fi
echo "is_release=false" >> "$GITHUB_OUTPUT"
echo "is_patch=false" >> "$GITHUB_OUTPUT"
- name: Build and push Docker image
env:
DOCKER_BUILDKIT: 1
DATABASE_URL: ${{ secrets.INFISICAL_DASHBOARD_DATABASE_URL }}
NEXTAUTH_URL: ${{ secrets.INFISICAL_DASHBOARD_NEXTAUTH_URL }}
NEXT_PUBLIC_FRONTEND_URL: ${{ secrets.INFISICAL_DASHBOARD_NEXT_PUBLIC_FRONTEND_URL }}
NEXT_PUBLIC_KEYCLOAK_URL: ${{ secrets.INFISICAL_DASHBOARD_NEXT_PUBLIC_KEYCLOAK_URL }}
NEXT_PUBLIC_KEYCLOAK_ID: ${{ secrets.INFISICAL_DASHBOARD_NEXT_PUBLIC_KEYCLOAK_ID }}
NEXT_PUBLIC_MAPBOX_TOKEN: ${{ secrets.INFISICAL_DASHBOARD_NEXT_PUBLIC_MAPBOX_TOKEN }}
IS_RELEASE: ${{ steps.release_meta.outputs.is_release }}
RELEASE_VERSION: ${{ steps.release_meta.outputs.version }}
RELEASE_MAJOR: ${{ steps.release_meta.outputs.major }}
RELEASE_MINOR: ${{ steps.release_meta.outputs.minor }}
run: |
IMAGE="ghcr.io/buildtheearth/dashboard-website"
TAGS=(
--tag "${IMAGE}:sha-$(git rev-parse --short=12 HEAD)"
)
if [[ "${GITHUB_REF}" == "refs/heads/dashboard/v2" ]]; then
TAGS+=(--tag "${IMAGE}:edge-dashboard-v2")
fi
if [[ "${IS_RELEASE}" == "true" ]]; then
TAGS+=(
--tag "${IMAGE}:${RELEASE_VERSION}"
--tag "${IMAGE}:${RELEASE_MAJOR}.${RELEASE_MINOR}"
--tag "${IMAGE}:${RELEASE_MAJOR}"
--tag "${IMAGE}:latest"
)
fi
docker buildx build . \
--file apps/dashboard/Dockerfile \
--build-arg NEXT_PUBLIC_FRONTEND_URL="$NEXT_PUBLIC_FRONTEND_URL" \
--build-arg NEXT_PUBLIC_KEYCLOAK_URL="$NEXT_PUBLIC_KEYCLOAK_URL" \
--build-arg NEXT_PUBLIC_KEYCLOAK_ID="$NEXT_PUBLIC_KEYCLOAK_ID" \
--build-arg NEXT_PUBLIC_MAPBOX_TOKEN="$NEXT_PUBLIC_MAPBOX_TOKEN" \
--build-arg NEXTAUTH_URL="$NEXTAUTH_URL" \
--secret id=database_url,env=DATABASE_URL \
--label org.opencontainers.image.source="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}" \
--label org.opencontainers.image.revision="${GITHUB_SHA}" \
--label org.opencontainers.image.version="${RELEASE_VERSION:-sha-$(git rev-parse --short=12 HEAD)}" \
"${TAGS[@]}" \
--push
- name: Publish GitHub release
if: steps.release_meta.outputs.is_release == 'true' && steps.release_meta.outputs.is_patch == 'false'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: dashboard-v${{ steps.release_meta.outputs.version }}
generate_release_notes: true