Skip to content

Commit b93f598

Browse files
committed
Fixes for Windows + release script (wip)
1 parent 8b909f3 commit b93f598

File tree

6 files changed

+170
-53
lines changed

6 files changed

+170
-53
lines changed

.github/workflows/release.yml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
inputs:
9+
version:
10+
description: 'Version tag (e.g., v1.0.0)'
11+
required: true
12+
type: string
13+
14+
permissions:
15+
contents: write
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
strategy:
21+
matrix:
22+
include:
23+
- os: linux
24+
arch: amd64
25+
binary: docker-inspector
26+
- os: darwin
27+
arch: amd64
28+
binary: docker-inspector
29+
- os: darwin
30+
arch: arm64
31+
binary: docker-inspector
32+
- os: windows
33+
arch: amd64
34+
binary: docker-inspector.exe
35+
36+
steps:
37+
- uses: actions/checkout@v4
38+
39+
- name: Set up Go
40+
uses: actions/setup-go@v5
41+
with:
42+
go-version: '1.21'
43+
44+
- name: Build internal inspector
45+
env:
46+
GOOS: linux
47+
GOARCH: amd64
48+
CGO_ENABLED: 0
49+
run: |
50+
go build -o cmd/docker-inspector/internal-inspector ./cmd/internal-inspector
51+
52+
- name: Build platform binary
53+
env:
54+
GOOS: ${{ matrix.os }}
55+
GOARCH: ${{ matrix.arch }}
56+
CGO_ENABLED: 0
57+
run: |
58+
go build -o ${{ matrix.binary }} ./cmd/docker-inspector
59+
60+
- name: Create release archive
61+
run: |
62+
zip docker-inspector-${{ matrix.os }}-${{ matrix.arch }}.zip ${{ matrix.binary }}
63+
64+
- name: Upload artifact
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: binary-${{ matrix.os }}-${{ matrix.arch }}
68+
path: docker-inspector-${{ matrix.os }}-${{ matrix.arch }}.zip
69+
retention-days: 1
70+
71+
release:
72+
needs: build
73+
runs-on: ubuntu-latest
74+
steps:
75+
- name: Download all artifacts
76+
uses: actions/download-artifact@v4
77+
with:
78+
pattern: binary-*
79+
merge-multiple: true
80+
81+
- name: Get version
82+
id: get_version
83+
run: |
84+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
85+
echo "version=${{ inputs.version }}" >> $GITHUB_OUTPUT
86+
else
87+
echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
88+
fi
89+
90+
- name: Create Release
91+
uses: softprops/action-gh-release@v1
92+
env:
93+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94+
with:
95+
tag_name: ${{ steps.get_version.outputs.version }}
96+
name: Release ${{ steps.get_version.outputs.version }}
97+
files: docker-inspector-*.zip
98+
generate_release_notes: true
99+
draft: false
100+
prerelease: false

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
docker-inspector-*
1+
/docker-inspector-darwin
2+
/docker-inspector-linux
3+
/docker-inspector.exe
24
cmd/docker-inspector/internal-inspector

cmd/docker-inspector/main.go

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"runtime"
1212
"strconv"
1313
"strings"
14-
"syscall"
1514
"text/tabwriter"
1615
)
1716

@@ -442,53 +441,3 @@ func extractID(s string) (int, error) {
442441
}
443442
return id, nil
444443
}
445-
446-
func isOwnershipSupported(dir string) bool {
447-
// Convert to absolute path
448-
absPath, err := filepath.Abs(dir)
449-
if err != nil {
450-
return false
451-
}
452-
453-
created := false
454-
stat, err := os.Stat(absPath)
455-
if err != nil {
456-
// Create the output directory if it doesn't exist
457-
if err := os.Mkdir(absPath, 0755); err != nil {
458-
return false
459-
}
460-
created = true
461-
}
462-
defer func() {
463-
if created {
464-
if err := os.Remove(absPath); err != nil {
465-
fmt.Fprintf(os.Stderr, "failed to remove %q: %v", absPath, err)
466-
}
467-
}
468-
}()
469-
470-
testFile, err := os.CreateTemp(dir, ".ownership-test-*")
471-
if err != nil {
472-
return false
473-
}
474-
testPath := testFile.Name()
475-
testFile.Close()
476-
defer os.Remove(testPath)
477-
478-
fmt.Fprintf(os.Stderr, "Checking filesystem of %q for ownership support (requires sudo)...\n", dir)
479-
// Try to change ownership to root:root
480-
if err := exec.Command("sudo", "chown", "999:999", testPath).Run(); err != nil {
481-
return false
482-
}
483-
484-
// Read back the ownership
485-
stat, err = os.Stat(testPath)
486-
if err != nil {
487-
return false
488-
}
489-
490-
if sys, ok := stat.Sys().(*syscall.Stat_t); ok {
491-
return sys.Uid == 999 && sys.Gid == 999
492-
}
493-
return false
494-
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
//go:build darwin || linux
2+
3+
package main
4+
5+
import (
6+
"fmt"
7+
"os"
8+
"os/exec"
9+
"path/filepath"
10+
"syscall"
11+
)
12+
13+
func isOwnershipSupported(dir string) bool {
14+
// Convert to absolute path
15+
absPath, err := filepath.Abs(dir)
16+
if err != nil {
17+
return false
18+
}
19+
20+
created := false
21+
stat, err := os.Stat(absPath)
22+
if err != nil {
23+
// Create the output directory if it doesn't exist
24+
if err := os.Mkdir(absPath, 0755); err != nil {
25+
return false
26+
}
27+
created = true
28+
}
29+
defer func() {
30+
if created {
31+
if err := os.Remove(absPath); err != nil {
32+
fmt.Fprintf(os.Stderr, "failed to remove %q: %v", absPath, err)
33+
}
34+
}
35+
}()
36+
37+
testFile, err := os.CreateTemp(dir, ".ownership-test-*")
38+
if err != nil {
39+
return false
40+
}
41+
testPath := testFile.Name()
42+
testFile.Close()
43+
defer os.Remove(testPath)
44+
45+
fmt.Fprintf(os.Stderr, "Checking filesystem of %q for ownership support (requires sudo)...\n", dir)
46+
// Try to change ownership to root:root
47+
if err := exec.Command("sudo", "chown", "999:999", testPath).Run(); err != nil {
48+
return false
49+
}
50+
51+
// Read back the ownership
52+
stat, err = os.Stat(testPath)
53+
if err != nil {
54+
return false
55+
}
56+
57+
if sys, ok := stat.Sys().(*syscall.Stat_t); ok {
58+
return sys.Uid == 999 && sys.Gid == 999
59+
}
60+
return false
61+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package main
2+
3+
func isOwnershipSupported(dir string) bool {
4+
return false
5+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/oderwat/docker-inspector
22

3-
go 1.23.2
3+
go 1.21
44

55
require (
66
github.com/alexflint/go-arg v1.5.1

0 commit comments

Comments
 (0)