-
Notifications
You must be signed in to change notification settings - Fork 0
129 lines (112 loc) · 3.61 KB
/
Copy pathrelease.yml
File metadata and controls
129 lines (112 loc) · 3.61 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
name: Release and Docker Package
on:
push:
branches: ["master"]
paths:
- "src/**"
- "Dockerfile"
- "pyproject.toml"
tags: ["v*.*.*"]
workflow_dispatch:
permissions:
contents: write
packages: write
jobs:
test:
name: Run Unit Tests (100% Required)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python 3.14
uses: actions/setup-python@v5
with:
python-version: "3.14"
- name: Create and activate virtual environment
run: |
python3 -m venv .venv
echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH
- name: Run unit test suite
run: |
PYTHONPATH=src python3 -m unittest discover -s tests -p "test_*.py" -v
- name: Test package install
run: |
pip install --upgrade pip
pip install .
ominirtksync --help
OminiRTKSync --help
build-and-push-docker:
name: Build and Push Multi-Arch Docker Image (x86_64 and arm64)
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/master' }}
type=sha,format=short,prefix=sha-
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
create-github-release:
name: Create GitHub Release
needs: build-and-push-docker
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
name: OminiRTKSync ${{ github.ref_name }}
body: |
## OminiRTKSync Docker Package
Multi-arch Docker image (linux/amd64, linux/arm64) published to GitHub Container Registry:
```bash
docker pull ghcr.io/${{ github.repository }}:${{ github.ref_name }}
docker pull ghcr.io/${{ github.repository }}:latest
```
prune-packages:
name: Prune Older Packages (Keep Last 3)
needs: build-and-push-docker
runs-on: ubuntu-latest
steps:
- name: Apply retention policy
uses: dataaxiom/ghcr-cleanup-action@v1.2.2
with:
token: ${{ secrets.GITHUB_TOKEN }}
owner: ${{ github.repository_owner }}
packages: ominirtksync
keep-n-tagged: 2
exclude-tags: latest
delete-untagged: true
delete-ghost-images: true
delete-partial-images: true
delete-orphaned-images: true
validate: true