Skip to content

Commit 4d8b466

Browse files
authored
Merge pull request #3 from MotorolaSolutions/master
Adding Windows support
2 parents b1aa30e + 18a5a86 commit 4d8b466

File tree

2 files changed

+64
-21
lines changed

2 files changed

+64
-21
lines changed

Makefile

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,77 @@
1+
.SECONDEXPANSION:
2+
3+
ifeq ($(OS),Windows_NT)
4+
SHELL := powershell.exe
5+
.SHELLFLAGS := -NoProfile -Command
6+
MKDIR := $$null = New-Item -Type Directory
7+
COPY := Copy-Item -Force
8+
MOVE := Move-Item -Force
9+
RM := Remove-Item -Recurse -Force
10+
else
11+
MKDIR := mkdir -p
12+
COPY := cp -f
13+
MOVE := mv -f
14+
RM := rm -rf
15+
endif
16+
117
CMD_PATH := cmd/git-remote-https+iap
218
CMD_NAME := git-remote-https+iap
319
BUILD_TARGETS := \
420
darwin-amd64 \
5-
linux-amd64
21+
linux-amd64 \
22+
windows-amd64
623

724
DIST_PATH := dist/
825
BIN_PATH := $(DIST_PATH)bin/
926
RELEASE_PATH := $(DIST_PATH)releases/
1027

1128
version := $(shell git describe --match "v*.*" --abbrev=7 --tags --dirty)
1229
build_args := -ldflags "-X main.version=${version}"
13-
tar_xform_arg := $(shell tar --version | grep -q 'GNU tar' && echo '--xform' || echo '-s')
14-
tar_xform_cmd := $(shell tar --version | grep -q 'GNU tar' && echo 's')
1530

1631
.PHONY: all
1732
all: build
1833

19-
$(BIN_PATH) $(RELEASE_PATH):
20-
mkdir -p $@
34+
$(RELEASE_PATH) $(addprefix $(BIN_PATH), $(BUILD_TARGETS)):
35+
$(MKDIR) $@
36+
37+
$(BIN_PATH)%/$(CMD_NAME): export GOOS = $(word 1, $(subst -, ,$*))
38+
$(BIN_PATH)%/$(CMD_NAME): export GOARCH = $(word 2, $(subst -, ,$*))
39+
$(BIN_PATH)%/$(CMD_NAME): export CGO_ENABLED = 0
40+
$(BIN_PATH)%/$(CMD_NAME): $(wildcard $(CMD_PATH)/*.go internal/*/*.go) | $(BIN_PATH)%
41+
go build $(build_args) -o $@ $<
42+
43+
$(BIN_PATH)%/$(CMD_NAME).exe: $(BIN_PATH)%/$(CMD_NAME)
44+
$(MOVE) $< $@
45+
46+
BUILDS := $(foreach target, $(BUILD_TARGETS), $(BIN_PATH)$(target)/$(CMD_NAME)$(if $(filter windows%,$(target)),.exe))
2147

22-
BUILDS := $(foreach target, $(BUILD_TARGETS), $(BIN_PATH)$(CMD_NAME)-$(target))
23-
$(BUILDS): OS = $(word 1, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@))))
24-
$(BUILDS): ARCH = $(word 2, $(subst -, ,$(subst $(CMD_NAME)-,,$(notdir $@))))
25-
$(BUILDS): $(BIN_PATH)
26-
env CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build ${build_args} -o $(BIN_PATH)${CMD_NAME}-$(OS)-$(ARCH) ${CMD_PATH}/*.go
48+
.PHONY: build
2749
build: $(BUILDS)
2850

2951
RELEASE_INCLUDES = README.md
30-
RELEASE_TARGETS := $(foreach target, $(BUILDS), $(RELEASE_PATH)$(notdir $(target))-$(version).tar.gz)
31-
$(RELEASE_TARGETS): $(RELEASE_PATH)%-$(version).tar.gz: $(BIN_PATH)% $(RELEASE_INCLUDES)
32-
mkdir -p $(RELEASE_PATH)
33-
tar $(tar_xform_arg) '$(tar_xform_cmd)!$(BIN_PATH)$(CMD_NAME).*!$(CMD_NAME)!' -czf $@ $^
34-
cd $(RELEASE_PATH) && shasum -a 256 $(notdir $@) >$(notdir $@).sha256
35-
release: $(RELEASE_TARGETS)
52+
RELEASE_TARGETS := $(foreach target, $(BUILD_TARGETS), $(RELEASE_PATH)$(CMD_NAME)-$(target)-$(version).tar.gz)
53+
54+
$(RELEASE_PATH)$(CMD_NAME)-%-$(version).tar.gz: $(BIN_PATH)%/$(CMD_NAME).tar.gz | $(RELEASE_PATH)
55+
$(MOVE) $< $@
56+
57+
$(BIN_PATH)%/$(CMD_NAME).tar.gz: $(BIN_PATH)%/$(CMD_NAME)$$(if $$(filter windows%,$$*),.exe) $(RELEASE_INCLUDES)
58+
$(COPY) $(filter-out $<,$^) $(@D)
59+
cd $(@D); tar czf $(@F) $(^F)
60+
61+
%.sha256: %
62+
ifeq ($(OS),Windows_NT)
63+
$$env:PSModulePath = "$$PSHOME\\Modules"; "$$((Get-FileHash -Algorithm SHA256 $<).Hash.ToLower()) $(<F)" > $@
64+
else
65+
cd $(@D) && shasum -a 256 $(<F) > $(@F)
66+
endif
67+
68+
.PHONY: release
69+
release: $(RELEASE_TARGETS) $(addsuffix .sha256, $(RELEASE_TARGETS))
3670

3771
.PHONY: version
3872
version:
3973
@echo "$(version)"
4074

4175
.PHONY: clean
4276
clean:
43-
rm -rf $(DIST_PATH)
77+
-$(RM) $(DIST_PATH)

internal/git/git.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"os/exec"
99
"regexp"
1010
"strings"
11-
"syscall"
1211

1312
"github.com/rs/zerolog/log"
1413
)
@@ -61,9 +60,19 @@ func PassThruRemoteHTTPSHelper(remote, url string) {
6160
log.Fatal().Msgf("passThruRemoteHTTPSHelper - %s", err.Error())
6261
}
6362

64-
env := os.Environ()
65-
if err := syscall.Exec(binary, args, env); err != nil {
66-
log.Fatal().Msgf("passThruRemoteHTTPSHelper - %s", err.Error())
63+
procAttr := &os.ProcAttr{Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}}
64+
process, err := os.StartProcess(binary, args, procAttr)
65+
if err != nil {
66+
log.Fatal().Msgf("passThruRemoteHTTPSHelper: failed starting remote-https - %s", err.Error())
67+
}
68+
69+
processState, err := process.Wait()
70+
if err != nil {
71+
log.Fatal().Msgf("passThruRemoteHTTPSHelper: failed waiting on remote-https - %s", err.Error())
72+
}
73+
74+
if !processState.Success() {
75+
os.Exit(processState.ExitCode())
6776
}
6877
}
6978

0 commit comments

Comments
 (0)