-
Notifications
You must be signed in to change notification settings - Fork 0
132 lines (113 loc) · 4.43 KB
/
Copy pathrelease.yml
File metadata and controls
132 lines (113 loc) · 4.43 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
127
128
129
130
131
132
name: Release
on:
push:
branches:
- main
permissions:
contents: write
pull-requests: write
packages: write
jobs:
release:
name: Release
runs-on: ubuntu-latest
outputs:
published: ${{ steps.changesets.outputs.published }}
publishedPackages: ${{ steps.changesets.outputs.publishedPackages }}
steps:
- name: Checkout Repo
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup pnpm
uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 24
cache: 'pnpm'
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Create Release Pull Request or Publish
id: changesets
uses: changesets/action@v1
with:
version: pnpm run version
publish: pnpm exec changeset publish
title: 'chore: version packages'
commit: 'chore: version packages'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
docker:
name: Build and Push Docker Images
runs-on: ubuntu-latest
needs: release
if: needs.release.outputs.published == 'true'
strategy:
matrix:
package: ${{ fromJson(needs.release.outputs.publishedPackages) }}
steps:
- name: Checkout Repo
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Extract package info
id: package-info
run: |
PACKAGE_NAME="${{ matrix.package.name }}"
PACKAGE_VERSION="${{ matrix.package.version }}"
# Remove scope from package name for path resolution
PACKAGE_SHORT_NAME=${PACKAGE_NAME#@marshant/}
# Find the package.json location
PACKAGE_JSON_PATH=""
for dir in services domains packages; do
if [ -f "$dir/$PACKAGE_SHORT_NAME/package.json" ]; then
PACKAGE_JSON_PATH="$dir/$PACKAGE_SHORT_NAME/package.json"
break
fi
done
if [ -z "$PACKAGE_JSON_PATH" ]; then
echo "Package not found: $PACKAGE_SHORT_NAME"
exit 1
fi
echo "package-path=$PACKAGE_JSON_PATH" >> $GITHUB_OUTPUT
echo "package-short-name=$PACKAGE_SHORT_NAME" >> $GITHUB_OUTPUT
# Check if package has dockerTarget field
DOCKER_TARGET=$(jq -r '.dockerTarget // empty' "$PACKAGE_JSON_PATH")
echo "docker-target=$DOCKER_TARGET" >> $GITHUB_OUTPUT
# If dockerTarget exists, mark as buildable
if [ -n "$DOCKER_TARGET" ]; then
echo "buildable=true" >> $GITHUB_OUTPUT
else
echo "buildable=false" >> $GITHUB_OUTPUT
fi
- name: Set up Docker Buildx
if: steps.package-info.outputs.buildable == 'true'
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
- name: Log in to GitHub Container Registry
if: steps.package-info.outputs.buildable == 'true'
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Generate Docker metadata
if: steps.package-info.outputs.buildable == 'true'
id: meta
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5
with:
images: ghcr.io/${{ github.repository }}/${{ steps.package-info.outputs.package-short-name }}
tags: |
type=semver,pattern={{version}},value=${{ matrix.package.version }}
type=semver,pattern={{major}}.{{minor}},value=${{ matrix.package.version }}
type=semver,pattern={{major}},value=${{ matrix.package.version }}
type=raw,value=latest
- name: Build and push Docker image
if: steps.package-info.outputs.buildable == 'true'
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6
with:
context: .
file: ./Dockerfile
target: ${{ steps.package-info.outputs.docker-target }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max