From f899f8fb28b962168fa8d1f59f20b92201ce731c Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Fri, 21 Jun 2024 11:37:10 +0300 Subject: [PATCH 1/5] ci: universal builder with scripts --- .github/workflows/test.yml | 4 ++-- packaging/Makefile | 24 ++++++++++++++++-------- packaging/pack.rb | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 packaging/pack.rb diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4e63f537..a80a7671 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -70,11 +70,11 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Build binaries - uses: goreleaser/goreleaser-action@v5 + uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser version: latest - args: build --snapshot --skip-validate --clean + args: build --snapshot --skip=validate --clean - name: Tar binaries to preserve executable bit run: 'tar -cvf lefthook-binaries.tar --directory dist/ $(find dist/ -executable -type f -printf "%P\0" | xargs --null)' - name: Upload binaries as artifacts diff --git a/packaging/Makefile b/packaging/Makefile index 642dbe1b..f1572b52 100644 --- a/packaging/Makefile +++ b/packaging/Makefile @@ -29,14 +29,22 @@ set-version: sed -E -i "s/(spec\.version\s+= ).*/\1\"$(VERSION)\"/" rubygems/lefthook.gemspec put-binaries: - install -D $(LINUX_AMD64_BIN) npm/lefthook-linux-x64/bin/lefthook - install -D $(LINUX_ARM64_BIN) npm/lefthook-linux-arm64/bin/lefthook - install -D $(FREEBSD_AMD64_BIN) npm/lefthook-freebsd-x64/bin/lefthook - install -D $(FREEBSD_ARM64_BIN) npm/lefthook-freebsd-arm64/bin/lefthook - install -D $(WINDOWS_AMD64_BIN) npm/lefthook-windows-x64/bin/lefthook.exe - install -D $(WINDOWS_ARM64_BIN) npm/lefthook-windows-arm64/bin/lefthook.exe - install -D $(DARWIN_AMD64_BIN) npm/lefthook-darwin-x64/bin/lefthook - install -D $(DARWIN_ARM64_BIN) npm/lefthook-darwin-arm64/bin/lefthook + mkdir -p npm/lefthook-linux-x64/bin/ + mkdir -p npm/lefthook-linux-arm64/bin/ + mkdir -p npm/lefthook-freebsd-x64/bin/ + mkdir -p npm/lefthook-freebsd-arm64/bin/ + mkdir -p npm/lefthook-windows-x64/bin/ + mkdir -p npm/lefthook-windows-arm64/bin/ + mkdir -p npm/lefthook-darwin-x64/bin/ + mkdir -p npm/lefthook-darwin-arm64/bin/ + install $(LINUX_AMD64_BIN) npm/lefthook-linux-x64/bin/lefthook + install $(LINUX_ARM64_BIN) npm/lefthook-linux-arm64/bin/lefthook + install $(FREEBSD_AMD64_BIN) npm/lefthook-freebsd-x64/bin/lefthook + install $(FREEBSD_ARM64_BIN) npm/lefthook-freebsd-arm64/bin/lefthook + install $(WINDOWS_AMD64_BIN) npm/lefthook-windows-x64/bin/lefthook.exe + install $(WINDOWS_ARM64_BIN) npm/lefthook-windows-arm64/bin/lefthook.exe + install $(DARWIN_AMD64_BIN) npm/lefthook-darwin-x64/bin/lefthook + install $(DARWIN_ARM64_BIN) npm/lefthook-darwin-arm64/bin/lefthook cd npm-bundled; npm version $(VERSION) --allow-same-version; cd - cd $(DIST_DIR); find . -maxdepth 2 -type f -exec cp --parents \{\} ../packaging/rubygems/libexec/ \; diff --git a/packaging/pack.rb b/packaging/pack.rb new file mode 100644 index 00000000..dec4e448 --- /dev/null +++ b/packaging/pack.rb @@ -0,0 +1,17 @@ +VERSION = 1.6.17 + +DIST_DIR = File.join(__dir__, "..", "dist") + +def clean + Dir["**/README.md"] + Dir["**/lefthook*"] + system("git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ rubygems/libexec/ rubygems/pkg/") +end + +def put_readme + Dir["npm/*"].each do |npm_dir| + FileUtils.cp("../README.md", npm_dir) + end + FileUtils.cp("../README.md", "npm-bundled/") + FileUtils.cp("../README.md", "npm-installer/") +end From ef7743c32eae5ed33ca306d833649009480eae93 Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Fri, 21 Jun 2024 13:28:39 +0300 Subject: [PATCH 2/5] ci: implement clean and put_readme :) --- packaging/pack.rb | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) mode change 100644 => 100755 packaging/pack.rb diff --git a/packaging/pack.rb b/packaging/pack.rb old mode 100644 new mode 100755 index dec4e448..2307e3e6 --- a/packaging/pack.rb +++ b/packaging/pack.rb @@ -1,17 +1,34 @@ -VERSION = 1.6.17 +#!/usr/bin/env ruby -DIST_DIR = File.join(__dir__, "..", "dist") +require "fileutils" -def clean - Dir["**/README.md"] - Dir["**/lefthook*"] - system("git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ rubygems/libexec/ rubygems/pkg/") -end +VERSION = "1.6.17" + +ROOT = File.join(__dir__, "..") +DIST = File.join(ROOT, "dist") + +module Pack + module_function -def put_readme - Dir["npm/*"].each do |npm_dir| - FileUtils.cp("../README.md", npm_dir) + def clean + FileUtils.cd(__dir__) + print "Cleaning... " + FileUtils.rm(Dir["npm/**/README.md"]) + FileUtils.rm(Dir["npm/**/lefthook*"].filter(&File.method(:file?))) + system("git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ rubygems/libexec/ rubygems/pkg/") + puts "done" + end + + def put_readme + FileUtils.cd(__dir__) + print "Putting READMEs... " + Dir["npm/*"].each do |npm_dir| + FileUtils.cp(File.join(ROOT, "README.md"), File.join(npm_dir, "README.md"), verbose: true) + end + FileUtils.cp(File.join(ROOT, "README.md"), "npm-bundled/", verbose: true) + FileUtils.cp(File.join(ROOT, "README.md"), "npm-installer/", verbose: true) + puts "done" end - FileUtils.cp("../README.md", "npm-bundled/") - FileUtils.cp("../README.md", "npm-installer/") end + +Pack.public_send ARGV[0] From 12d9610c02ad712bf2fdad88475401a42c25c60f Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Mon, 24 Jun 2024 12:07:41 +0300 Subject: [PATCH 3/5] fix: prepare all parts in the script --- Makefile | 3 +- packaging/Makefile | 24 ++++-------- packaging/pack.rb | 96 ++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 95 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index 3de1cbfc..c748008c 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,7 @@ version: @read -p "New version: " version sed -i "s/const version = .*/const version = \"$$version\"/" internal/version/version.go sed -i "s/VERSION := .*/VERSION := $$version/" packaging/Makefile + sed -i "s/VERSION = .*/VERSION = \"$$version\"/" packaging/pack.rb sed -i "s/lefthook-plugin.git\", exact: \".*\"/lefthook-plugin.git\", exact: \"$$version\"/" docs/install.md - make -C packaging clean set-version + ruby packaging/pack.rb clean set_version git add internal/version/version.go packaging/* docs/install.md diff --git a/packaging/Makefile b/packaging/Makefile index f1572b52..642dbe1b 100644 --- a/packaging/Makefile +++ b/packaging/Makefile @@ -29,22 +29,14 @@ set-version: sed -E -i "s/(spec\.version\s+= ).*/\1\"$(VERSION)\"/" rubygems/lefthook.gemspec put-binaries: - mkdir -p npm/lefthook-linux-x64/bin/ - mkdir -p npm/lefthook-linux-arm64/bin/ - mkdir -p npm/lefthook-freebsd-x64/bin/ - mkdir -p npm/lefthook-freebsd-arm64/bin/ - mkdir -p npm/lefthook-windows-x64/bin/ - mkdir -p npm/lefthook-windows-arm64/bin/ - mkdir -p npm/lefthook-darwin-x64/bin/ - mkdir -p npm/lefthook-darwin-arm64/bin/ - install $(LINUX_AMD64_BIN) npm/lefthook-linux-x64/bin/lefthook - install $(LINUX_ARM64_BIN) npm/lefthook-linux-arm64/bin/lefthook - install $(FREEBSD_AMD64_BIN) npm/lefthook-freebsd-x64/bin/lefthook - install $(FREEBSD_ARM64_BIN) npm/lefthook-freebsd-arm64/bin/lefthook - install $(WINDOWS_AMD64_BIN) npm/lefthook-windows-x64/bin/lefthook.exe - install $(WINDOWS_ARM64_BIN) npm/lefthook-windows-arm64/bin/lefthook.exe - install $(DARWIN_AMD64_BIN) npm/lefthook-darwin-x64/bin/lefthook - install $(DARWIN_ARM64_BIN) npm/lefthook-darwin-arm64/bin/lefthook + install -D $(LINUX_AMD64_BIN) npm/lefthook-linux-x64/bin/lefthook + install -D $(LINUX_ARM64_BIN) npm/lefthook-linux-arm64/bin/lefthook + install -D $(FREEBSD_AMD64_BIN) npm/lefthook-freebsd-x64/bin/lefthook + install -D $(FREEBSD_ARM64_BIN) npm/lefthook-freebsd-arm64/bin/lefthook + install -D $(WINDOWS_AMD64_BIN) npm/lefthook-windows-x64/bin/lefthook.exe + install -D $(WINDOWS_ARM64_BIN) npm/lefthook-windows-arm64/bin/lefthook.exe + install -D $(DARWIN_AMD64_BIN) npm/lefthook-darwin-x64/bin/lefthook + install -D $(DARWIN_ARM64_BIN) npm/lefthook-darwin-arm64/bin/lefthook cd npm-bundled; npm version $(VERSION) --allow-same-version; cd - cd $(DIST_DIR); find . -maxdepth 2 -type f -exec cp --parents \{\} ../packaging/rubygems/libexec/ \; diff --git a/packaging/pack.rb b/packaging/pack.rb index 2307e3e6..80156c59 100755 --- a/packaging/pack.rb +++ b/packaging/pack.rb @@ -8,27 +8,101 @@ DIST = File.join(ROOT, "dist") module Pack + extend FileUtils + module_function + def prepare + clean + set_version + put_readme + put_binaries + end + def clean - FileUtils.cd(__dir__) - print "Cleaning... " - FileUtils.rm(Dir["npm/**/README.md"]) - FileUtils.rm(Dir["npm/**/lefthook*"].filter(&File.method(:file?))) - system("git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ rubygems/libexec/ rubygems/pkg/") + cd(__dir__) + puts "Cleaning... " + rm(Dir["npm/**/README.md"]) + rm(Dir["npm/**/lefthook*"].filter(&File.method(:file?))) + system("git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ rubygems/libexec/ rubygems/pkg/", exception: true) puts "done" end + def set_version + cd(__dir__) + puts "Replacing version to #{VERSION} in packages" + (Dir["npm/**/package.json"] + ["npm-bundled/package.json", "npm-installer/package.json"]).each do |package_json| + replace_in_file(package_json, /"version": "[\d.]+"/, %{"version": "#{VERSION}"}) + end + + replace_in_file("npm/lefthook/package.json", /"(lefthook-.+)": "[\d.]+"/, %{"\\1": "#{VERSION}"}) + replace_in_file("rubygems/lefthook.gemspec", /(spec\.version\s+= ).*/, %{\\1"#{VERSION}"}) + end + def put_readme - FileUtils.cd(__dir__) - print "Putting READMEs... " + cd(__dir__) + puts "Putting READMEs... " Dir["npm/*"].each do |npm_dir| - FileUtils.cp(File.join(ROOT, "README.md"), File.join(npm_dir, "README.md"), verbose: true) + cp(File.join(ROOT, "README.md"), File.join(npm_dir, "README.md"), verbose: true) + end + cp(File.join(ROOT, "README.md"), "npm-bundled/", verbose: true) + cp(File.join(ROOT, "README.md"), "npm-installer/", verbose: true) + puts "done" + end + + def put_binaries + cd(__dir__) + puts "Putting binaries to packages..." + { + "#{DIST}/lefthook_linux_amd64_v1/lefthook" => "npm/lefthook-linux-x64/bin/lefthook", + "#{DIST}/lefthook_linux_arm64/lefthook" => "npm/lefthook-linux-arm64/bin/lefthook", + "#{DIST}/lefthook_freebsd_amd64_v1/lefthook" => "npm/lefthook-freebsd-x64/bin/lefthook", + "#{DIST}/lefthook_freebsd_arm64/lefthook" => "npm/lefthook-freebsd-arm64/bin/lefthook", + "#{DIST}/lefthook_windows_amd64_v1/lefthook.exe" => "npm/lefthook-windows-x64/bin/lefthook.exe", + "#{DIST}/lefthook_windows_arm64/lefthook.exe" => "npm/lefthook-windows-arm64/bin/lefthook.exe", + "#{DIST}/lefthook_darwin_amd64_v1/lefthook" => "npm/lefthook-darwin-x64/bin/lefthook", + "#{DIST}/lefthook_darwin_arm64/lefthook" => "npm/lefthook-darwin-arm64/bin/lefthook", + }.each do |(source, dest)| + mkdir_p(File.dirname(dest)) + cp(source, dest, verbose: true) + end + puts "done" + end + + def publish + puts "Publishing lefthook npm..." + cd(File.join(__dir__, "npm")) + Dir["lefthook*"].each do |package| + system("npm publish --access public #{package}", exception: true) end - FileUtils.cp(File.join(ROOT, "README.md"), "npm-bundled/", verbose: true) - FileUtils.cp(File.join(ROOT, "README.md"), "npm-installer/", verbose: true) + + puts "Publishing @evilmartians/lefthook npm..." + cd(File.join(__dir__, "npm-bundled")) + system("npm publish --access public", exception: true) + + puts "Publishing @evilmartians/lefthook-installer npm..." + cd(File.join(__dir__, "npm-installer")) + system("npm publish --access public", exception: true) + + puts "Publishing lefthook gem..." + cd(File.join(__dir__, "rubygems")) + system("rake build", exception: true) + system("gem push pkg/*.gem", exception: true) + puts "done" end + + def replace_in_file(filepath, regexp, value) + text = File.open(filepath, "r") do |f| + f.read + end + text.gsub!(regexp, value) + File.open(filepath, "w") do |f| + f.write(text) + end + end end -Pack.public_send ARGV[0] +ARGV.each do |cmd| + Pack.public_send(cmd) +end From b931d150a933314aeea59625c9ae54dbe0d4a620 Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Tue, 25 Jun 2024 11:35:54 +0300 Subject: [PATCH 4/5] chore: use Ruby script --- .github/workflows/release.yml | 4 +-- Makefile | 1 - packaging/Makefile | 52 ----------------------------------- 3 files changed, 2 insertions(+), 55 deletions(-) delete mode 100644 packaging/Makefile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c4623610..18fefdbb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,8 +59,8 @@ jobs: EOF chmod 0600 ~/.gem/credentials cd packaging/ - make prepare - make publish + ruby pack.rb prepare + ruby pack.rb publish - name: Update Homebrew formula uses: dawidd6/action-homebrew-bump-formula@v3 diff --git a/Makefile b/Makefile index c748008c..e73c1409 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,6 @@ lint: bin/golangci-lint version: @read -p "New version: " version sed -i "s/const version = .*/const version = \"$$version\"/" internal/version/version.go - sed -i "s/VERSION := .*/VERSION := $$version/" packaging/Makefile sed -i "s/VERSION = .*/VERSION = \"$$version\"/" packaging/pack.rb sed -i "s/lefthook-plugin.git\", exact: \".*\"/lefthook-plugin.git\", exact: \"$$version\"/" docs/install.md ruby packaging/pack.rb clean set_version diff --git a/packaging/Makefile b/packaging/Makefile deleted file mode 100644 index 642dbe1b..00000000 --- a/packaging/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# Packages version to release -VERSION := 1.6.18 - -DIST_DIR := ../dist - -LINUX_AMD64_BIN=$(DIST_DIR)/lefthook_linux_amd64_v1/lefthook -LINUX_ARM64_BIN=$(DIST_DIR)/lefthook_linux_arm64/lefthook -FREEBSD_AMD64_BIN=$(DIST_DIR)/lefthook_freebsd_amd64_v1/lefthook -FREEBSD_ARM64_BIN=$(DIST_DIR)/lefthook_freebsd_arm64/lefthook -WINDOWS_AMD64_BIN=$(DIST_DIR)/lefthook_windows_amd64_v1/lefthook.exe -WINDOWS_ARM64_BIN=$(DIST_DIR)/lefthook_windows_arm64/lefthook.exe -DARWIN_AMD64_BIN=$(DIST_DIR)/lefthook_darwin_amd64_v1/lefthook -DARWIN_ARM64_BIN=$(DIST_DIR)/lefthook_darwin_arm64/lefthook - -prepare: clean set-version put-readme put-binaries - -publish: - cd npm; find . -type d -name 'lefthook*' -exec npm publish --access public \{} \; ; cd - - cd npm-bundled; npm publish --access public ; cd - - cd npm-installer; npm publish --access public ; cd - - cd rubygems; rake build; gem push pkg/*.gem ; cd - - -# Update versions of all packages -set-version: - find npm -name 'package.json' -type f -print0 | xargs -0 sed -E -i "s/\"version\": \".+\"/\"version\": \"$(VERSION)\"/" - sed -E -i "s/\"(lefthook-.+)\": \".+\"/\"\1\": \"$(VERSION)\"/g" npm/lefthook/package.json - sed -E -i "0,/version/{s/\"version\": \".+\"/\"version\": \"$(VERSION)\"/}" npm-bundled/package.json - sed -E -i "0,/version/{s/\"version\": \".+\"/\"version\": \"$(VERSION)\"/}" npm-installer/package.json - sed -E -i "s/(spec\.version\s+= ).*/\1\"$(VERSION)\"/" rubygems/lefthook.gemspec - -put-binaries: - install -D $(LINUX_AMD64_BIN) npm/lefthook-linux-x64/bin/lefthook - install -D $(LINUX_ARM64_BIN) npm/lefthook-linux-arm64/bin/lefthook - install -D $(FREEBSD_AMD64_BIN) npm/lefthook-freebsd-x64/bin/lefthook - install -D $(FREEBSD_ARM64_BIN) npm/lefthook-freebsd-arm64/bin/lefthook - install -D $(WINDOWS_AMD64_BIN) npm/lefthook-windows-x64/bin/lefthook.exe - install -D $(WINDOWS_ARM64_BIN) npm/lefthook-windows-arm64/bin/lefthook.exe - install -D $(DARWIN_AMD64_BIN) npm/lefthook-darwin-x64/bin/lefthook - install -D $(DARWIN_ARM64_BIN) npm/lefthook-darwin-arm64/bin/lefthook - cd npm-bundled; npm version $(VERSION) --allow-same-version; cd - - cd $(DIST_DIR); find . -maxdepth 2 -type f -exec cp --parents \{\} ../packaging/rubygems/libexec/ \; - -put-readme: - find npm/ -type d -name 'lefthook*' -exec cp -f ../README.md \{} \; - cp ../README.md npm-bundled/ - cp ../README.md npm-installer/ - -clean: - find npm/ -name 'README.md' -exec rm \{} \; - find npm/ -type f -name 'lefthook*' -exec rm \{} \; - git clean -fdX npm-installer/ npm-bundled/ npm-bundled/bin/ - git clean -fdX rubygems/libexec/ rubygems/pkg/ From 2348b339dacd3379b7c048e8f4ca4027868d412a Mon Sep 17 00:00:00 2001 From: Valentin Kiselev Date: Tue, 25 Jun 2024 11:39:40 +0300 Subject: [PATCH 5/5] chore: rebase --- .gitignore | 10 ++++------ packaging/pack.rb | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 3fb90110..9d02edbd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,17 @@ .vscode/ .idea/ -/lefthook-local.yml /lefthook +/lefthook-local.yml tmp/ dist/ + +# Packages packaging/rubygems/pkg/ packaging/rubygems/libexec/ packaging/npm-bundled/bin/ packaging/npm-*/README.md packaging/npm/*/bin/ -!packaging/npm/lefthook/bin/index.js packaging/npm/*/README.md -package.json !packaging/npm/*/package.json -node_modules/ -yarn.lock -package-lock.json +!packaging/npm/lefthook/bin/index.js diff --git a/packaging/pack.rb b/packaging/pack.rb index 80156c59..2009ca83 100755 --- a/packaging/pack.rb +++ b/packaging/pack.rb @@ -2,7 +2,7 @@ require "fileutils" -VERSION = "1.6.17" +VERSION = "1.6.18" ROOT = File.join(__dir__, "..") DIST = File.join(ROOT, "dist")