-
Notifications
You must be signed in to change notification settings - Fork 4
144 lines (128 loc) · 4.78 KB
/
test-release.yml
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
133
134
135
136
137
138
139
140
141
142
143
144
name: Test Release
on:
pull_request:
branches:
- develop
- main
paths:
- "apps/cargo-scout-audit/**"
workflow_dispatch:
env:
PYTHONUNBUFFERED: 1
REGISTRY: coinfabrik
IMAGE_NAME: scout
jobs:
filter-paths:
name: Filter modified paths by PR
runs-on: ubuntu-latest
outputs:
scout-audit: ${{ steps.filter.outputs.scout_audit }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Filter Paths
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
scout_audit:
- 'apps/cargo-scout-audit/**'
test-release:
name: Test dry-run release
needs: filter-paths
runs-on: ubuntu-latest
outputs:
scout-audit: ${{ steps.scout-audit.outputs.result }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests toml
- name: Test Scout Audit
id: scout-audit
if: ${{ needs.filter-paths.outputs.scout-audit == 'true' }}
run: |
python scripts/publish-to-crates-io.py --crate-path apps/cargo-scout-audit --dry-run
echo "result=success" >> $GITHUB_OUTPUT
test-docker-release:
name: Release to Docker Hub
runs-on: ${{ matrix.os }}
needs: filter-paths
if: ${{ needs.filter-paths.outputs.scout-audit == 'true' }}
strategy:
matrix:
os: [ubuntu-latest]
platform: [linux/amd64, linux/arm64]
permissions:
packages: write
contents: read
attestations: write
id-token: write
outputs:
docker-release: ${{ steps.test-docker-release.outputs.result }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Get scout version
id: scout-version
run: |
version=$(cat apps/cargo-scout-audit/Cargo.toml | grep '^version' | head -1 | awk -F '"' '{print $2}')
echo "Version extracted: $version"
echo "version=$version" >> $GITHUB_OUTPUT
- name: Set platform-specific tag prefix
id: set-tag-prefix
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
echo "tag_prefix=-arm64" >> $GITHUB_OUTPUT
else
echo "tag_prefix=" >> $GITHUB_OUTPUT
fi
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
id: push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
platforms: ${{ matrix.platform }}
cache-from: type=gha
cache-to: type=gha
push: false
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}${{ steps.set-tag-prefix.outputs.tag_prefix }}:${{ steps.scout-version.outputs.version }},
${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}${{ steps.set-tag-prefix.outputs.tag_prefix }}:latest
- name: Set Docker release status
id: test-docker-release
run: echo "result=success" >> $GITHUB_OUTPUT
comment-on-pr:
name: Comment on PR about release status
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [filter-paths, test-release, test-docker-release]
steps:
- name: Find existing comment
id: find_comment
uses: peter-evans/find-comment@v3
with:
issue-number: ${{ github.event.pull_request.number }}
body-includes: "🚀 Release Dry-Run Summary"
- name: Create or Update PR Comment
uses: peter-evans/create-or-update-comment@v4.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
comment-id: ${{ steps.find_comment.outputs.comment-id }}
edit-mode: replace
issue-number: ${{ github.event.pull_request.number }}
body: |
## 🚀 Release Dry-Run Summary
| Crate | Release Status | Dry Run Status |
| --- | --- | --- |
| [cargo-scout-audit](https://crates.io/crates/cargo-scout-audit) | ${{ needs.filter-paths.outputs.scout-audit == 'true' && '🟢 Releasing' || '🔴 Not Releasing' }} | ${{ needs.filter-paths.outputs.scout-audit == 'true' && (needs.test-release.outputs.scout-audit == 'success' && '✅ Successful' || '❌ Failed') || 'N/A' }} |
| [scout-docker](https://hub.docker.com/repository/docker/coinfabrik/scout/general) | ${{ needs.filter-paths.outputs.scout-audit == 'true' && '🟢 Releasing' || '🔴 Not Releasing' }} | ${{ needs.filter-paths.outputs.scout-audit == 'true' && (needs.test-docker-release.outputs.docker-release == 'success' && '✅ Successful' || '❌ Failed') || 'N/A' }} |