better-mem0-mcp 1.1.0b9__tar.gz → 1.1.0b17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- better_mem0_mcp-1.1.0b17/.github/scripts/check-ci-cd-status.sh +86 -0
- better_mem0_mcp-1.1.0b17/.github/scripts/merge-with-auto-resolve.sh +85 -0
- better_mem0_mcp-1.1.0b17/.github/workflows/cd.yml +297 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.github/workflows/ci.yml +5 -5
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.gitignore +2 -2
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.mise.toml +1 -4
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.releaserc.json +1 -1
- better_mem0_mcp-1.1.0b17/.vscode/better-mem0-mcp.code-workspace +8 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/CHANGELOG.md +56 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/PKG-INFO +1 -1
- better_mem0_mcp-1.1.0b17/package-lock.json +27 -0
- better_mem0_mcp-1.1.0b17/package.json +5 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/pyproject.toml +1 -2
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/scripts/clean-venv.mjs +5 -5
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/uv.lock +1 -1
- better_mem0_mcp-1.1.0b9/.github/workflows/cd.yml +0 -166
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.dockerignore +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.editorconfig +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.pre-commit-config.yaml +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/.python-version +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/CONTRIBUTING.md +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/Dockerfile +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/LICENSE +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/README.md +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/SECURITY.md +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/__init__.py +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/config.py +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/docs/memory.md +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/graph.py +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/py.typed +0 -0
- {better_mem0_mcp-1.1.0b9 → better_mem0_mcp-1.1.0b17}/src/better_mem0_mcp/server.py +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Check CI/CD workflow status before promoting
|
|
3
|
+
# Usage: ./check-ci-cd-status.sh [--branch=dev] [--ci-workflow=ci.yml] [--cd-workflow=cd.yml]
|
|
4
|
+
# Environment: GH_TOKEN must be set
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Default values
|
|
9
|
+
BRANCH="${BRANCH:-dev}"
|
|
10
|
+
CI_WORKFLOW="${CI_WORKFLOW:-ci.yml}"
|
|
11
|
+
CD_WORKFLOW="${CD_WORKFLOW:-cd.yml}"
|
|
12
|
+
|
|
13
|
+
# Parse arguments
|
|
14
|
+
for arg in "$@"; do
|
|
15
|
+
case $arg in
|
|
16
|
+
--branch=*)
|
|
17
|
+
BRANCH="${arg#*=}"
|
|
18
|
+
;;
|
|
19
|
+
--ci-workflow=*)
|
|
20
|
+
CI_WORKFLOW="${arg#*=}"
|
|
21
|
+
;;
|
|
22
|
+
--cd-workflow=*)
|
|
23
|
+
CD_WORKFLOW="${arg#*=}"
|
|
24
|
+
;;
|
|
25
|
+
*)
|
|
26
|
+
echo "Unknown argument: $arg"
|
|
27
|
+
exit 1
|
|
28
|
+
;;
|
|
29
|
+
esac
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
echo "Checking CI/CD status on $BRANCH branch..."
|
|
33
|
+
FAILED=false
|
|
34
|
+
|
|
35
|
+
# Check CI workflow
|
|
36
|
+
echo "--- Checking CI workflow ($CI_WORKFLOW) ---"
|
|
37
|
+
CI_STATUS=$(gh run list --workflow="$CI_WORKFLOW" --branch="$BRANCH" --limit=1 --json status,conclusion --jq '.[0]' 2>/dev/null || echo "")
|
|
38
|
+
|
|
39
|
+
if [ -z "$CI_STATUS" ] || [ "$CI_STATUS" = "null" ]; then
|
|
40
|
+
echo "Warning: No CI runs found for $BRANCH branch"
|
|
41
|
+
else
|
|
42
|
+
CI_RUN_STATUS=$(echo "$CI_STATUS" | jq -r '.status')
|
|
43
|
+
CI_CONCLUSION=$(echo "$CI_STATUS" | jq -r '.conclusion')
|
|
44
|
+
echo "CI - Status: $CI_RUN_STATUS, Conclusion: $CI_CONCLUSION"
|
|
45
|
+
|
|
46
|
+
if [ "$CI_RUN_STATUS" != "completed" ]; then
|
|
47
|
+
echo "Error: CI is still running on $BRANCH branch"
|
|
48
|
+
FAILED=true
|
|
49
|
+
elif [ "$CI_CONCLUSION" != "success" ]; then
|
|
50
|
+
echo "Error: CI failed on $BRANCH branch"
|
|
51
|
+
FAILED=true
|
|
52
|
+
else
|
|
53
|
+
echo "✓ CI passed"
|
|
54
|
+
fi
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Check CD workflow (only push events, not workflow_dispatch)
|
|
58
|
+
echo "--- Checking CD workflow ($CD_WORKFLOW) ---"
|
|
59
|
+
CD_STATUS=$(gh run list --workflow="$CD_WORKFLOW" --branch="$BRANCH" --event=push --limit=1 --json status,conclusion --jq '.[0]' 2>/dev/null || echo "")
|
|
60
|
+
|
|
61
|
+
if [ -z "$CD_STATUS" ] || [ "$CD_STATUS" = "null" ]; then
|
|
62
|
+
echo "Warning: No CD runs found for $BRANCH branch"
|
|
63
|
+
else
|
|
64
|
+
CD_RUN_STATUS=$(echo "$CD_STATUS" | jq -r '.status')
|
|
65
|
+
CD_CONCLUSION=$(echo "$CD_STATUS" | jq -r '.conclusion')
|
|
66
|
+
echo "CD - Status: $CD_RUN_STATUS, Conclusion: $CD_CONCLUSION"
|
|
67
|
+
|
|
68
|
+
if [ "$CD_RUN_STATUS" != "completed" ]; then
|
|
69
|
+
echo "Error: CD is still running on $BRANCH branch. Please wait for beta release to complete."
|
|
70
|
+
FAILED=true
|
|
71
|
+
elif [ "$CD_CONCLUSION" != "success" ]; then
|
|
72
|
+
echo "Error: CD failed on $BRANCH branch"
|
|
73
|
+
FAILED=true
|
|
74
|
+
else
|
|
75
|
+
echo "✓ CD passed"
|
|
76
|
+
fi
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
if [ "$FAILED" = true ]; then
|
|
80
|
+
echo ""
|
|
81
|
+
echo "Please fix the issues or wait for workflows to complete before promoting."
|
|
82
|
+
exit 1
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
echo ""
|
|
86
|
+
echo "✓ All checks passed. Proceeding with promotion..."
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Merge source branch to target branch with auto-resolve for semantic-release managed files
|
|
3
|
+
# Usage: ./merge-with-auto-resolve.sh [--source=dev] [--target=main] [--files="CHANGELOG.md,package.json"]
|
|
4
|
+
# Environment: Must be run in a git repository with proper permissions
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Default values
|
|
9
|
+
SOURCE_BRANCH="${SOURCE_BRANCH:-dev}"
|
|
10
|
+
TARGET_BRANCH="${TARGET_BRANCH:-main}"
|
|
11
|
+
AUTO_RESOLVE_FILES="${AUTO_RESOLVE_FILES:-CHANGELOG.md,package.json}"
|
|
12
|
+
|
|
13
|
+
# Parse arguments
|
|
14
|
+
for arg in "$@"; do
|
|
15
|
+
case $arg in
|
|
16
|
+
--source=*)
|
|
17
|
+
SOURCE_BRANCH="${arg#*=}"
|
|
18
|
+
;;
|
|
19
|
+
--target=*)
|
|
20
|
+
TARGET_BRANCH="${arg#*=}"
|
|
21
|
+
;;
|
|
22
|
+
--files=*)
|
|
23
|
+
AUTO_RESOLVE_FILES="${arg#*=}"
|
|
24
|
+
;;
|
|
25
|
+
*)
|
|
26
|
+
echo "Unknown argument: $arg"
|
|
27
|
+
exit 1
|
|
28
|
+
;;
|
|
29
|
+
esac
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
echo "Merging $SOURCE_BRANCH to $TARGET_BRANCH..."
|
|
33
|
+
echo "Auto-resolve files: $AUTO_RESOLVE_FILES"
|
|
34
|
+
|
|
35
|
+
# Setup git
|
|
36
|
+
git config user.name "github-actions[bot]"
|
|
37
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
38
|
+
|
|
39
|
+
# Fetch and checkout target
|
|
40
|
+
git fetch origin
|
|
41
|
+
git checkout "$TARGET_BRANCH"
|
|
42
|
+
git pull origin "$TARGET_BRANCH"
|
|
43
|
+
|
|
44
|
+
# Disable exit on error to handle merge conflicts gracefully
|
|
45
|
+
set +e
|
|
46
|
+
|
|
47
|
+
# Attempt merge
|
|
48
|
+
git merge "origin/$SOURCE_BRANCH" --no-ff -m "chore: promote $SOURCE_BRANCH to $TARGET_BRANCH"
|
|
49
|
+
MERGE_RESULT=$?
|
|
50
|
+
|
|
51
|
+
set -e
|
|
52
|
+
|
|
53
|
+
if [ $MERGE_RESULT -ne 0 ]; then
|
|
54
|
+
echo "Merge had conflicts, attempting auto-resolution..."
|
|
55
|
+
|
|
56
|
+
# Convert comma-separated list to array
|
|
57
|
+
IFS=',' read -ra FILES <<< "$AUTO_RESOLVE_FILES"
|
|
58
|
+
|
|
59
|
+
for file in "${FILES[@]}"; do
|
|
60
|
+
# Trim whitespace
|
|
61
|
+
file=$(echo "$file" | xargs)
|
|
62
|
+
if git diff --name-only --diff-filter=U | grep -q "^${file}$"; then
|
|
63
|
+
echo "Auto-resolving conflict in $file (accepting $SOURCE_BRANCH version)"
|
|
64
|
+
git checkout --theirs "$file"
|
|
65
|
+
git add "$file"
|
|
66
|
+
fi
|
|
67
|
+
done
|
|
68
|
+
|
|
69
|
+
# Check if there are remaining conflicts
|
|
70
|
+
if git diff --name-only --diff-filter=U | grep -q .; then
|
|
71
|
+
echo "Error: Unresolved conflicts in files not managed by semantic-release:"
|
|
72
|
+
git diff --name-only --diff-filter=U
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
# Complete the merge
|
|
77
|
+
git commit --no-edit
|
|
78
|
+
echo "✓ Conflicts resolved and merge completed"
|
|
79
|
+
else
|
|
80
|
+
echo "✓ Merge completed without conflicts"
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Push
|
|
84
|
+
git push origin "$TARGET_BRANCH"
|
|
85
|
+
echo "✓ Successfully pushed to $TARGET_BRANCH"
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
name: CD
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [dev, main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
action:
|
|
9
|
+
description: "Select action"
|
|
10
|
+
required: true
|
|
11
|
+
default: "promote-to-stable"
|
|
12
|
+
type: choice
|
|
13
|
+
options:
|
|
14
|
+
- promote-to-stable
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
packages: write
|
|
19
|
+
id-token: write
|
|
20
|
+
|
|
21
|
+
env:
|
|
22
|
+
DOCKERHUB_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/better-mem0-mcp
|
|
23
|
+
GHCR_IMAGE: ghcr.io/${{ github.repository }}
|
|
24
|
+
|
|
25
|
+
concurrency:
|
|
26
|
+
group: cd-${{ github.repository }}
|
|
27
|
+
cancel-in-progress: false
|
|
28
|
+
|
|
29
|
+
jobs:
|
|
30
|
+
promote:
|
|
31
|
+
name: Promote to Stable
|
|
32
|
+
if: github.event_name == 'workflow_dispatch' && inputs.action == 'promote-to-stable'
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
|
|
35
|
+
steps:
|
|
36
|
+
- name: Checkout code
|
|
37
|
+
uses: actions/checkout@v6
|
|
38
|
+
with:
|
|
39
|
+
fetch-depth: 0
|
|
40
|
+
token: ${{ secrets.GH_PAT }}
|
|
41
|
+
|
|
42
|
+
- name: Check CI/CD status on dev branch
|
|
43
|
+
env:
|
|
44
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
45
|
+
run: |
|
|
46
|
+
chmod +x .github/scripts/check-ci-cd-status.sh
|
|
47
|
+
./.github/scripts/check-ci-cd-status.sh --branch=dev
|
|
48
|
+
|
|
49
|
+
- name: Merge dev to main
|
|
50
|
+
env:
|
|
51
|
+
AUTO_RESOLVE_FILES: "CHANGELOG.md,pyproject.toml"
|
|
52
|
+
run: |
|
|
53
|
+
chmod +x .github/scripts/merge-with-auto-resolve.sh
|
|
54
|
+
./.github/scripts/merge-with-auto-resolve.sh --source=dev --target=main --files="$AUTO_RESOLVE_FILES"
|
|
55
|
+
|
|
56
|
+
release:
|
|
57
|
+
name: Semantic Release
|
|
58
|
+
if: github.event_name == 'push'
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
outputs:
|
|
61
|
+
released: ${{ steps.check.outputs.released }}
|
|
62
|
+
version: ${{ steps.check.outputs.version }}
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- name: Checkout code
|
|
66
|
+
uses: actions/checkout@v6
|
|
67
|
+
with:
|
|
68
|
+
fetch-depth: 0
|
|
69
|
+
token: ${{ secrets.GH_PAT }}
|
|
70
|
+
|
|
71
|
+
- name: Setup Node.js
|
|
72
|
+
uses: actions/setup-node@v6
|
|
73
|
+
with:
|
|
74
|
+
node-version: "22"
|
|
75
|
+
|
|
76
|
+
- name: Install uv (for toml-cli)
|
|
77
|
+
uses: astral-sh/setup-uv@v5
|
|
78
|
+
with:
|
|
79
|
+
version: "latest"
|
|
80
|
+
|
|
81
|
+
- name: Install semantic-release
|
|
82
|
+
run: npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec
|
|
83
|
+
|
|
84
|
+
- name: Run semantic-release
|
|
85
|
+
env:
|
|
86
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
87
|
+
run: npx semantic-release
|
|
88
|
+
|
|
89
|
+
- name: Check release status
|
|
90
|
+
id: check
|
|
91
|
+
run: |
|
|
92
|
+
git fetch --tags
|
|
93
|
+
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
94
|
+
CURRENT_COMMIT=$(git rev-parse HEAD)
|
|
95
|
+
TAG_COMMIT=$(git rev-list -n 1 "$LATEST_TAG" 2>/dev/null || echo "")
|
|
96
|
+
|
|
97
|
+
if [ -n "$LATEST_TAG" ] && [ "$CURRENT_COMMIT" = "$TAG_COMMIT" ]; then
|
|
98
|
+
echo "released=true" >> $GITHUB_OUTPUT
|
|
99
|
+
echo "version=${LATEST_TAG#v}" >> $GITHUB_OUTPUT
|
|
100
|
+
echo "New release detected: $LATEST_TAG"
|
|
101
|
+
else
|
|
102
|
+
echo "released=false" >> $GITHUB_OUTPUT
|
|
103
|
+
echo "No new release"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
publish-pypi:
|
|
107
|
+
name: Publish to PyPI
|
|
108
|
+
needs: release
|
|
109
|
+
if: needs.release.outputs.released == 'true'
|
|
110
|
+
runs-on: ubuntu-latest
|
|
111
|
+
|
|
112
|
+
steps:
|
|
113
|
+
- name: Checkout code
|
|
114
|
+
uses: actions/checkout@v6
|
|
115
|
+
with:
|
|
116
|
+
ref: ${{ github.ref }}
|
|
117
|
+
|
|
118
|
+
- name: Install uv
|
|
119
|
+
uses: astral-sh/setup-uv@v5
|
|
120
|
+
|
|
121
|
+
- name: Build package
|
|
122
|
+
run: uv build
|
|
123
|
+
|
|
124
|
+
- name: Publish to PyPI
|
|
125
|
+
env:
|
|
126
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
127
|
+
run: uv publish
|
|
128
|
+
|
|
129
|
+
build-docker:
|
|
130
|
+
name: Build Docker (${{ matrix.platform }})
|
|
131
|
+
needs: release
|
|
132
|
+
if: needs.release.outputs.released == 'true'
|
|
133
|
+
strategy:
|
|
134
|
+
fail-fast: false
|
|
135
|
+
matrix:
|
|
136
|
+
include:
|
|
137
|
+
- platform: linux/amd64
|
|
138
|
+
runner: ubuntu-latest
|
|
139
|
+
artifact: linux-amd64
|
|
140
|
+
- platform: linux/arm64
|
|
141
|
+
runner: ubuntu-24.04-arm
|
|
142
|
+
artifact: linux-arm64
|
|
143
|
+
runs-on: ${{ matrix.runner }}
|
|
144
|
+
|
|
145
|
+
steps:
|
|
146
|
+
- name: Checkout code
|
|
147
|
+
uses: actions/checkout@v6
|
|
148
|
+
|
|
149
|
+
- name: Set up Docker Buildx
|
|
150
|
+
uses: docker/setup-buildx-action@v3
|
|
151
|
+
|
|
152
|
+
- name: Login to Docker Hub
|
|
153
|
+
uses: docker/login-action@v3
|
|
154
|
+
with:
|
|
155
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
156
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
157
|
+
|
|
158
|
+
- name: Login to GitHub Container Registry
|
|
159
|
+
uses: docker/login-action@v3
|
|
160
|
+
with:
|
|
161
|
+
registry: ghcr.io
|
|
162
|
+
username: ${{ github.actor }}
|
|
163
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
164
|
+
|
|
165
|
+
- name: Build and push by digest
|
|
166
|
+
id: build
|
|
167
|
+
uses: docker/build-push-action@v6
|
|
168
|
+
with:
|
|
169
|
+
context: .
|
|
170
|
+
platforms: ${{ matrix.platform }}
|
|
171
|
+
outputs: type=image,"name=${{ env.DOCKERHUB_IMAGE }},${{ env.GHCR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true
|
|
172
|
+
cache-from: type=gha,scope=${{ github.ref_name }}-${{ matrix.artifact }}
|
|
173
|
+
cache-to: type=gha,mode=max,scope=${{ github.ref_name }}-${{ matrix.artifact }}
|
|
174
|
+
|
|
175
|
+
- name: Export digest
|
|
176
|
+
run: |
|
|
177
|
+
echo "Digest: ${{ steps.build.outputs.digest }}"
|
|
178
|
+
if [ -z "${{ steps.build.outputs.digest }}" ]; then
|
|
179
|
+
echo "Error: Digest is empty!"
|
|
180
|
+
exit 1
|
|
181
|
+
fi
|
|
182
|
+
mkdir -p ${{ runner.temp }}/digests
|
|
183
|
+
echo "${{ steps.build.outputs.digest }}" | sed 's/^sha256://' | xargs -I{} touch "${{ runner.temp }}/digests/{}"
|
|
184
|
+
|
|
185
|
+
- name: Upload digest
|
|
186
|
+
uses: actions/upload-artifact@v4
|
|
187
|
+
with:
|
|
188
|
+
name: digests-${{ matrix.artifact }}
|
|
189
|
+
path: ${{ runner.temp }}/digests/*
|
|
190
|
+
retention-days: 1
|
|
191
|
+
|
|
192
|
+
merge-docker:
|
|
193
|
+
name: Merge Docker Manifests
|
|
194
|
+
needs: [release, build-docker]
|
|
195
|
+
if: needs.release.outputs.released == 'true'
|
|
196
|
+
runs-on: ubuntu-latest
|
|
197
|
+
|
|
198
|
+
steps:
|
|
199
|
+
- name: Download digests
|
|
200
|
+
uses: actions/download-artifact@v4
|
|
201
|
+
with:
|
|
202
|
+
path: ${{ runner.temp }}/digests
|
|
203
|
+
pattern: digests-*
|
|
204
|
+
merge-multiple: true
|
|
205
|
+
|
|
206
|
+
- name: Set up Docker Buildx
|
|
207
|
+
uses: docker/setup-buildx-action@v3
|
|
208
|
+
|
|
209
|
+
- name: Login to Docker Hub
|
|
210
|
+
uses: docker/login-action@v3
|
|
211
|
+
with:
|
|
212
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
213
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
214
|
+
|
|
215
|
+
- name: Login to GitHub Container Registry
|
|
216
|
+
uses: docker/login-action@v3
|
|
217
|
+
with:
|
|
218
|
+
registry: ghcr.io
|
|
219
|
+
username: ${{ github.actor }}
|
|
220
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
221
|
+
|
|
222
|
+
- name: Create and push manifest (stable)
|
|
223
|
+
if: github.ref == 'refs/heads/main'
|
|
224
|
+
working-directory: ${{ runner.temp }}/digests
|
|
225
|
+
env:
|
|
226
|
+
VERSION: ${{ needs.release.outputs.version }}
|
|
227
|
+
run: |
|
|
228
|
+
MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
|
|
229
|
+
MAJOR=$(echo "$VERSION" | cut -d. -f1)
|
|
230
|
+
|
|
231
|
+
# Prepare sources
|
|
232
|
+
SOURCES_DOCKERHUB=""
|
|
233
|
+
SOURCES_GHCR=""
|
|
234
|
+
for digest in *; do
|
|
235
|
+
SOURCES_DOCKERHUB="$SOURCES_DOCKERHUB ${{ env.DOCKERHUB_IMAGE }}@sha256:$digest"
|
|
236
|
+
SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
|
|
237
|
+
done
|
|
238
|
+
|
|
239
|
+
# Create manifests for Docker Hub
|
|
240
|
+
docker buildx imagetools create \
|
|
241
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:latest \
|
|
242
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
|
|
243
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:$MAJOR_MINOR \
|
|
244
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:$MAJOR \
|
|
245
|
+
$SOURCES_DOCKERHUB
|
|
246
|
+
|
|
247
|
+
# Create manifests for GHCR
|
|
248
|
+
docker buildx imagetools create \
|
|
249
|
+
-t ${{ env.GHCR_IMAGE }}:latest \
|
|
250
|
+
-t ${{ env.GHCR_IMAGE }}:$VERSION \
|
|
251
|
+
-t ${{ env.GHCR_IMAGE }}:$MAJOR_MINOR \
|
|
252
|
+
-t ${{ env.GHCR_IMAGE }}:$MAJOR \
|
|
253
|
+
$SOURCES_GHCR
|
|
254
|
+
|
|
255
|
+
- name: Create and push manifest (beta)
|
|
256
|
+
if: github.ref == 'refs/heads/dev'
|
|
257
|
+
working-directory: ${{ runner.temp }}/digests
|
|
258
|
+
env:
|
|
259
|
+
VERSION: ${{ needs.release.outputs.version }}
|
|
260
|
+
run: |
|
|
261
|
+
SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7)
|
|
262
|
+
|
|
263
|
+
# Prepare sources
|
|
264
|
+
SOURCES_DOCKERHUB=""
|
|
265
|
+
SOURCES_GHCR=""
|
|
266
|
+
for digest in *; do
|
|
267
|
+
SOURCES_DOCKERHUB="$SOURCES_DOCKERHUB ${{ env.DOCKERHUB_IMAGE }}@sha256:$digest"
|
|
268
|
+
SOURCES_GHCR="$SOURCES_GHCR ${{ env.GHCR_IMAGE }}@sha256:$digest"
|
|
269
|
+
done
|
|
270
|
+
|
|
271
|
+
# Create manifests for Docker Hub
|
|
272
|
+
docker buildx imagetools create \
|
|
273
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:beta \
|
|
274
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:$VERSION \
|
|
275
|
+
-t ${{ env.DOCKERHUB_IMAGE }}:beta-$SHORT_SHA \
|
|
276
|
+
$SOURCES_DOCKERHUB
|
|
277
|
+
|
|
278
|
+
# Create manifests for GHCR
|
|
279
|
+
docker buildx imagetools create \
|
|
280
|
+
-t ${{ env.GHCR_IMAGE }}:beta \
|
|
281
|
+
-t ${{ env.GHCR_IMAGE }}:$VERSION \
|
|
282
|
+
-t ${{ env.GHCR_IMAGE }}:beta-$SHORT_SHA \
|
|
283
|
+
$SOURCES_GHCR
|
|
284
|
+
|
|
285
|
+
- name: Checkout code
|
|
286
|
+
if: github.ref == 'refs/heads/main'
|
|
287
|
+
uses: actions/checkout@v6
|
|
288
|
+
|
|
289
|
+
- name: Update Docker Hub Description
|
|
290
|
+
if: github.ref == 'refs/heads/main'
|
|
291
|
+
uses: peter-evans/dockerhub-description@v5
|
|
292
|
+
with:
|
|
293
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
294
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
295
|
+
repository: ${{ secrets.DOCKERHUB_USERNAME }}/better-mem0-mcp
|
|
296
|
+
short-description: ${{ github.event.repository.description }}
|
|
297
|
+
readme-filepath: ./README.md
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
|
|
18
18
|
steps:
|
|
19
19
|
- name: Checkout code
|
|
20
|
-
uses: actions/checkout@
|
|
20
|
+
uses: actions/checkout@v6
|
|
21
21
|
|
|
22
22
|
- name: Install uv
|
|
23
23
|
uses: astral-sh/setup-uv@v5
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
version: "latest"
|
|
26
26
|
|
|
27
27
|
- name: Setup Python 3.13
|
|
28
|
-
uses: actions/setup-python@
|
|
28
|
+
uses: actions/setup-python@v6
|
|
29
29
|
with:
|
|
30
30
|
python-version: "3.13"
|
|
31
31
|
|
|
@@ -51,7 +51,7 @@ jobs:
|
|
|
51
51
|
|
|
52
52
|
- name: Comment PR on success
|
|
53
53
|
if: success() && github.event_name == 'pull_request'
|
|
54
|
-
uses: actions/github-script@
|
|
54
|
+
uses: actions/github-script@v8
|
|
55
55
|
with:
|
|
56
56
|
script: |
|
|
57
57
|
github.rest.issues.createComment({
|
|
@@ -63,7 +63,7 @@ jobs:
|
|
|
63
63
|
|
|
64
64
|
- name: Comment PR on failure
|
|
65
65
|
if: failure() && github.event_name == 'pull_request'
|
|
66
|
-
uses: actions/github-script@
|
|
66
|
+
uses: actions/github-script@v8
|
|
67
67
|
with:
|
|
68
68
|
script: |
|
|
69
69
|
github.rest.issues.createComment({
|
|
@@ -80,7 +80,7 @@ jobs:
|
|
|
80
80
|
|
|
81
81
|
steps:
|
|
82
82
|
- name: Checkout code
|
|
83
|
-
uses: actions/checkout@
|
|
83
|
+
uses: actions/checkout@v6
|
|
84
84
|
|
|
85
85
|
- name: Dependency Review
|
|
86
86
|
uses: actions/dependency-review-action@v4
|
|
@@ -22,10 +22,7 @@ run = [
|
|
|
22
22
|
"node scripts/clean-venv.mjs",
|
|
23
23
|
"uv pip install pre-commit",
|
|
24
24
|
"uv run pre-commit install",
|
|
25
|
-
"echo ''"
|
|
26
|
-
"echo 'Setup complete!'",
|
|
27
|
-
"echo ' -> Check: mise run check'",
|
|
28
|
-
"echo ' -> Test: mise run test'"
|
|
25
|
+
"echo 'Setup complete!'"
|
|
29
26
|
]
|
|
30
27
|
|
|
31
28
|
[tasks.check]
|
|
@@ -1,3 +1,59 @@
|
|
|
1
|
+
# [1.1.0-beta.17](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.16...v1.1.0-beta.17) (2026-01-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* correct semantic-release outputs detection ([eecfeea](https://github.com/n24q02m/better-mem0-mcp/commit/eecfeea50c9d4a758f6810d5989ae4c1eaf1398a))
|
|
7
|
+
|
|
8
|
+
# [1.1.0-beta.16](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.15...v1.1.0-beta.16) (2026-01-05)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* verify ci/cd workflow changes ([dfb6480](https://github.com/n24q02m/better-mem0-mcp/commit/dfb6480f13721a04606a3246947af5fd0764cc6a))
|
|
14
|
+
|
|
15
|
+
# [1.1.0-beta.15](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.14...v1.1.0-beta.15) (2026-01-04)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* **ci:** verify CD workflow with beta and stable releases ([19e3150](https://github.com/n24q02m/better-mem0-mcp/commit/19e3150f903608cb57906b3f15af92df7bb29303))
|
|
21
|
+
|
|
22
|
+
# [1.1.0-beta.14](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.13...v1.1.0-beta.14) (2026-01-04)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* add comprehensive CD workflow for semantic release, PyPI publishing, and Docker image builds, and update project version. ([1c393c6](https://github.com/n24q02m/better-mem0-mcp/commit/1c393c644756eb96e33c3e7208a6aa10054fd2f6))
|
|
28
|
+
|
|
29
|
+
# [1.1.0-beta.13](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.12...v1.1.0-beta.13) (2026-01-04)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* **cd:** use GH_PAT to enable workflow trigger on mainUsing GITHUB_TOKEN prevents push from triggering other workflows.Using GH_PAT allows promote-to-stable to trigger CD on main branch,which then runs semantic-release to create stable releases. ([66f703d](https://github.com/n24q02m/better-mem0-mcp/commit/66f703de163934222beca65524fcb4b61e0ea2c6))
|
|
35
|
+
|
|
36
|
+
# [1.1.0-beta.12](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.11...v1.1.0-beta.12) (2026-01-04)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Bug Fixes
|
|
40
|
+
|
|
41
|
+
* **cd:** add cd.yml to auto-resolve files list ([bd17665](https://github.com/n24q02m/better-mem0-mcp/commit/bd17665206305a4a5ac0c7641796db50cdb40776))
|
|
42
|
+
|
|
43
|
+
# [1.1.0-beta.11](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.10...v1.1.0-beta.11) (2026-01-04)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
### Bug Fixes
|
|
47
|
+
|
|
48
|
+
* **setup:** don't fail when venv is locked but unusable ([ba0eae4](https://github.com/n24q02m/better-mem0-mcp/commit/ba0eae47530a26a79adb01292f2082224a89e870))
|
|
49
|
+
|
|
50
|
+
# [1.1.0-beta.10](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.9...v1.1.0-beta.10) (2026-01-04)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
* **cd:** add shared scripts for promote workflow ([57a930a](https://github.com/n24q02m/better-mem0-mcp/commit/57a930a6e0021b8c7ff0c3b94a2f8d7b63cb18a0))
|
|
56
|
+
|
|
1
57
|
# [1.1.0-beta.9](https://github.com/n24q02m/better-mem0-mcp/compare/v1.1.0-beta.8...v1.1.0-beta.9) (2026-01-02)
|
|
2
58
|
|
|
3
59
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: better-mem0-mcp
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.0b17
|
|
4
4
|
Summary: Zero-setup MCP Server for AI memory - works with Neon/Supabase
|
|
5
5
|
Project-URL: Homepage, https://github.com/n24q02m/better-mem0-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/n24q02m/better-mem0-mcp.git
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "better-mem0-mcp",
|
|
3
|
+
"lockfileVersion": 3,
|
|
4
|
+
"requires": true,
|
|
5
|
+
"packages": {
|
|
6
|
+
"": {
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"yaml": "^2.8.2"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"node_modules/yaml": {
|
|
12
|
+
"version": "2.8.2",
|
|
13
|
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
|
|
14
|
+
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
|
|
15
|
+
"license": "ISC",
|
|
16
|
+
"bin": {
|
|
17
|
+
"yaml": "bin.mjs"
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">= 14.6"
|
|
21
|
+
},
|
|
22
|
+
"funding": {
|
|
23
|
+
"url": "https://github.com/sponsors/eemeli"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "better-mem0-mcp"
|
|
3
|
-
version = "1.1.0-beta.
|
|
3
|
+
version = "1.1.0-beta.17"
|
|
4
4
|
description = "Zero-setup MCP Server for AI memory - works with Neon/Supabase"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -71,4 +71,3 @@ python_files = ["test_*.py"]
|
|
|
71
71
|
# - possibly-missing-attribute: Runtime-checked attributes
|
|
72
72
|
# - invalid-assignment: Dynamic dict type inference issues
|
|
73
73
|
rules = { unresolved-import = "ignore", unresolved-attribute = "ignore", possibly-missing-attribute = "ignore", invalid-assignment = "ignore" }
|
|
74
|
-
|
|
@@ -101,12 +101,12 @@ if (wasRemoved) {
|
|
|
101
101
|
"If you experience issues, close VSCode and run 'mise run setup' again."
|
|
102
102
|
);
|
|
103
103
|
} else {
|
|
104
|
-
console.
|
|
105
|
-
"
|
|
104
|
+
console.warn(
|
|
105
|
+
"Warning: .venv exists but is not usable, and we cannot remove it."
|
|
106
106
|
);
|
|
107
|
-
console.
|
|
108
|
-
"Please close VSCode and
|
|
107
|
+
console.warn(
|
|
108
|
+
"Skipping venv setup. Please close VSCode and run 'mise run setup' again if needed."
|
|
109
109
|
);
|
|
110
|
-
|
|
110
|
+
// Don't fail the entire setup, just warn and continue
|
|
111
111
|
}
|
|
112
112
|
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
name: CD
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main, dev]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
inputs:
|
|
8
|
-
action:
|
|
9
|
-
description: "Action to perform"
|
|
10
|
-
required: true
|
|
11
|
-
default: "promote-to-stable"
|
|
12
|
-
type: choice
|
|
13
|
-
options:
|
|
14
|
-
- promote-to-stable
|
|
15
|
-
|
|
16
|
-
permissions:
|
|
17
|
-
contents: write
|
|
18
|
-
packages: write
|
|
19
|
-
id-token: write
|
|
20
|
-
|
|
21
|
-
env:
|
|
22
|
-
DOCKER_IMAGE: ghcr.io/${{ github.repository }}
|
|
23
|
-
|
|
24
|
-
jobs:
|
|
25
|
-
release:
|
|
26
|
-
name: Semantic Release
|
|
27
|
-
runs-on: ubuntu-latest
|
|
28
|
-
if: github.event_name == 'push'
|
|
29
|
-
outputs:
|
|
30
|
-
released: ${{ steps.semantic.outputs.new_release_published }}
|
|
31
|
-
version: ${{ steps.semantic.outputs.new_release_version }}
|
|
32
|
-
|
|
33
|
-
steps:
|
|
34
|
-
- name: Checkout code
|
|
35
|
-
uses: actions/checkout@v4
|
|
36
|
-
with:
|
|
37
|
-
fetch-depth: 0
|
|
38
|
-
|
|
39
|
-
- name: Setup Node.js
|
|
40
|
-
uses: actions/setup-node@v4
|
|
41
|
-
with:
|
|
42
|
-
node-version: "22"
|
|
43
|
-
|
|
44
|
-
- name: Install uv (for toml-cli)
|
|
45
|
-
uses: astral-sh/setup-uv@v5
|
|
46
|
-
with:
|
|
47
|
-
version: "latest"
|
|
48
|
-
|
|
49
|
-
- name: Install semantic-release
|
|
50
|
-
run: npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec
|
|
51
|
-
|
|
52
|
-
- name: Run semantic-release
|
|
53
|
-
id: semantic
|
|
54
|
-
env:
|
|
55
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
56
|
-
run: |
|
|
57
|
-
npx semantic-release --dry-run > release-output.txt 2>&1 || true
|
|
58
|
-
if grep -q "Published release" release-output.txt || grep -q "Release notes" release-output.txt; then
|
|
59
|
-
npx semantic-release
|
|
60
|
-
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
|
|
61
|
-
if [ -n "$LATEST_TAG" ]; then
|
|
62
|
-
echo "new_release_published=true" >> "$GITHUB_OUTPUT"
|
|
63
|
-
echo "new_release_version=${LATEST_TAG#v}" >> "$GITHUB_OUTPUT"
|
|
64
|
-
else
|
|
65
|
-
echo "new_release_published=false" >> "$GITHUB_OUTPUT"
|
|
66
|
-
fi
|
|
67
|
-
else
|
|
68
|
-
echo "new_release_published=false" >> "$GITHUB_OUTPUT"
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
publish-pypi:
|
|
72
|
-
name: Publish to PyPI
|
|
73
|
-
needs: release
|
|
74
|
-
if: needs.release.outputs.released == 'true'
|
|
75
|
-
runs-on: ubuntu-latest
|
|
76
|
-
|
|
77
|
-
steps:
|
|
78
|
-
- name: Checkout code
|
|
79
|
-
uses: actions/checkout@v4
|
|
80
|
-
with:
|
|
81
|
-
ref: v${{ needs.release.outputs.version }}
|
|
82
|
-
|
|
83
|
-
- name: Install uv
|
|
84
|
-
uses: astral-sh/setup-uv@v5
|
|
85
|
-
|
|
86
|
-
- name: Build package
|
|
87
|
-
run: uv build
|
|
88
|
-
|
|
89
|
-
- name: Publish to PyPI
|
|
90
|
-
env:
|
|
91
|
-
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
92
|
-
run: uv publish
|
|
93
|
-
|
|
94
|
-
publish-docker:
|
|
95
|
-
name: Build & Push Docker Image
|
|
96
|
-
needs: release
|
|
97
|
-
if: needs.release.outputs.released == 'true'
|
|
98
|
-
runs-on: ubuntu-latest
|
|
99
|
-
|
|
100
|
-
steps:
|
|
101
|
-
- name: Checkout code
|
|
102
|
-
uses: actions/checkout@v4
|
|
103
|
-
with:
|
|
104
|
-
ref: v${{ needs.release.outputs.version }}
|
|
105
|
-
|
|
106
|
-
- name: Set up Docker Buildx
|
|
107
|
-
uses: docker/setup-buildx-action@v3
|
|
108
|
-
|
|
109
|
-
- name: Login to Docker Hub
|
|
110
|
-
uses: docker/login-action@v3
|
|
111
|
-
with:
|
|
112
|
-
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
113
|
-
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
114
|
-
|
|
115
|
-
- name: Login to GHCR
|
|
116
|
-
uses: docker/login-action@v3
|
|
117
|
-
with:
|
|
118
|
-
registry: ghcr.io
|
|
119
|
-
username: ${{ github.actor }}
|
|
120
|
-
password: ${{ secrets.GITHUB_TOKEN }}
|
|
121
|
-
|
|
122
|
-
- name: Determine tags
|
|
123
|
-
id: tags
|
|
124
|
-
run: |
|
|
125
|
-
VERSION=${{ needs.release.outputs.version }}
|
|
126
|
-
BRANCH=${{ github.ref_name }}
|
|
127
|
-
|
|
128
|
-
if [ "$BRANCH" = "main" ]; then
|
|
129
|
-
DOCKERHUB_TAGS="n24q02m/better-mem0-mcp:$VERSION,n24q02m/better-mem0-mcp:latest"
|
|
130
|
-
GHCR_TAGS="${{ env.DOCKER_IMAGE }}:$VERSION,${{ env.DOCKER_IMAGE }}:latest"
|
|
131
|
-
else
|
|
132
|
-
DOCKERHUB_TAGS="n24q02m/better-mem0-mcp:$VERSION,n24q02m/better-mem0-mcp:beta"
|
|
133
|
-
GHCR_TAGS="${{ env.DOCKER_IMAGE }}:$VERSION,${{ env.DOCKER_IMAGE }}:beta"
|
|
134
|
-
fi
|
|
135
|
-
echo "tags=$DOCKERHUB_TAGS,$GHCR_TAGS" >> $GITHUB_OUTPUT
|
|
136
|
-
|
|
137
|
-
- name: Build and push
|
|
138
|
-
uses: docker/build-push-action@v6
|
|
139
|
-
with:
|
|
140
|
-
context: .
|
|
141
|
-
file: ./Dockerfile
|
|
142
|
-
push: true
|
|
143
|
-
tags: ${{ steps.tags.outputs.tags }}
|
|
144
|
-
|
|
145
|
-
promote-stable:
|
|
146
|
-
name: Promote to Stable
|
|
147
|
-
if: github.event_name == 'workflow_dispatch' && inputs.action == 'promote-to-stable'
|
|
148
|
-
runs-on: ubuntu-latest
|
|
149
|
-
|
|
150
|
-
steps:
|
|
151
|
-
- name: Checkout code
|
|
152
|
-
uses: actions/checkout@v4
|
|
153
|
-
with:
|
|
154
|
-
ref: dev
|
|
155
|
-
fetch-depth: 0
|
|
156
|
-
|
|
157
|
-
- name: Setup Git
|
|
158
|
-
run: |
|
|
159
|
-
git config user.name "github-actions[bot]"
|
|
160
|
-
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
161
|
-
|
|
162
|
-
- name: Merge dev to main
|
|
163
|
-
run: |
|
|
164
|
-
git checkout main
|
|
165
|
-
git merge dev --no-edit
|
|
166
|
-
git push origin main
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|