feat: add 'generate_go_deps' step (#4)

This commit is contained in:
Jared Allard 2024-06-23 14:03:55 -07:00 committed by GitHub
parent 2b36e5c04a
commit 834d8d985e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 121 additions and 109 deletions

View file

@ -52,6 +52,9 @@ dev-util/mise:
| Key | Description |
| --- | --- |
| `url` | The URL where the git repository lives. HTTPS is recommended. |
| `tags` | Denote if we should consider tags or commits as the version |
| `disable_semver` | Disables parsing/sorting versions based on semver |
| `consider_pre_releases` | Denotes if we should consider semver pre-releases or not |
### **apt** `options`
@ -59,14 +62,18 @@ dev-util/mise:
| --- | --- |
| `repository` | Sources list entry for the APT repository |
| `package` | The package name as it appears in the repository |
| `strip_release` | Strips semver release information from the calculated version |
### `steps`
| Key | Description |
| --- | --- |
| `command` | A command to be ran. |
| `original_ebuild` | Path to write an ebuild |
| `checkout` | Checkout the Git repository at the detected version |
| `ebuild` | Path to read modified ebuild from |
| `generate_go_deps` | Generate a `deps.tar.xz` for the current Go project |
| `original_ebuild` | Path to write an ebuild |
| `upload_artifact` | Upload a built artifact to a predictable path for usage in `SRC_URI` |
## License

View file

@ -0,0 +1,38 @@
#!/usr/bin/env bash
# Copyright (C) 2024 Jared Allard
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
set -euo pipefail
MODE="${1:-"slim"}"
GO_VERSION=$(grep "^go" go.mod | awk '{ print $2 }' | awk -F '.' '{ print $1"."$2}')
mise use -g golang@"${GO_VERSION}"
# Create the dependency tar.
echo "Creating dependency tarball"
if [[ "$MODE" == "full" ]]; then
tarDir="go-mod"
GOMODCACHE="${PWD}"/go-mod go mod download -modcacherw
else
go mod vendor
tarDir="vendor"
fi
echo "Creating tarball (compressing with xz, this may take a while...)"
XZ_OPT=-e9T0 tar cJf deps.tar.xz "$tarDir"
ls -alh deps.tar.xz
echo "Changing Go version to ${GO_VERSION}"
sed -i 's|dev-lang\/go-.*|dev-lang\/go-'"${GO_VERSION}"'"|' new.ebuild

View file

@ -0,0 +1,63 @@
// Copyright (C) 2024 Jared Allard
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package steps
import (
"context"
_ "embed"
"fmt"
"github.com/jaredallard/overlay/.tools/internal/steps/stepshelpers"
)
//go:embed embed/generate-go-deps.sh
var generateGoDepsScript []byte
// GenerateGoDepsStep generates a go dependency archive in the container
// at deps.tar.xz.
type GenerateGoDepsStep struct {
mode string // "slim" or "full", defaults to "slim"
}
// NewGenerateGoDepsStep creates a new GenerateGoDepsStep from the
// provided input.
func NewGenerateGoDepsStep(input any) (StepRunner, error) {
mode, ok := input.(string)
if !ok && input != nil {
return nil, fmt.Errorf("expected string, got %T", input)
}
if mode == "" {
mode = "slim"
}
return &GenerateGoDepsStep{mode}, nil
}
// Run runs the provided command inside of the step runner.
func (e GenerateGoDepsStep) Run(ctx context.Context, env Environment) (*StepOutput, error) {
if err := stepshelpers.CopyFileBytesToContainer(ctx, env.containerID, generateGoDepsScript, "/tmp/command.sh"); err != nil {
return nil, fmt.Errorf("failed to create shell script in container: %w", err)
}
if err := stepshelpers.RunCommandInContainer(ctx, env.containerID,
"bash", "/tmp/command.sh", e.mode,
); err != nil {
return nil, fmt.Errorf("failed to generate manifest: %w", err)
}
return &StepOutput{}, nil
}

View file

@ -62,11 +62,12 @@ func (s *Steps) UnmarshalYAML(node *yaml.Node) error {
// knownSteps map of key values to their respective steps.
knownSteps := map[string]func(any) (StepRunner, error){
"command": NewCommandStep,
"checkout": NewCheckoutStep,
"ebuild": NewEbuildStep,
"original_ebuild": NewOriginalEbuildStep,
"upload_artifact": NewUploadArtifactStep,
"command": NewCommandStep,
"checkout": NewCheckoutStep,
"ebuild": NewEbuildStep,
"generate_go_deps": NewGenerateGoDepsStep,
"original_ebuild": NewOriginalEbuildStep,
"upload_artifact": NewUploadArtifactStep,
}
for _, rawStep := range raw {

View file

@ -13,4 +13,4 @@ RUN export MAKEOPTS="-j$(nproc)" && \
# Install mise for things that might need it.
RUN curl https://mise.run | sh
ENV PATH="/root/.local/bin:/root/.local/share/mise/shims:${PATH}"
RUN set -e; whoami; echo $HOME; mise --version
RUN set -e; whoami; echo "$HOME"; mise --version

View file

@ -1,5 +1,3 @@
DIST tailscale-1.66.4-deps.tar.xz 395282764 BLAKE2B ce730c19a71ac4ea6528d5c71c8ef7271da9b2c668ea878e717d7d6e2e11d1fc371c50ab8bab68a6a841e8596f9f8a5a3eec1f94f17e7f21d1d6f2c475cca9e4 SHA512 8670dd91268f1254834a0c6ddd945015da7c21f5f2228366fafb667861f7670ac2523119e004e39d65eacce2dfef4518fb35cd93451eddbf5b062da619eca2a3
DIST tailscale-1.66.4.tar.gz 2636998 BLAKE2B 617cd97d7536faac53d46167fdf48acd430bc453cef6f5157df1c8f6bd98973c8b17c0687a7d931501979b70da3b1268fde77a3f9653b1143eb363d09b5e719f SHA512 6c114508964f86984cdbcd2f3e81c4939f4c5a0ed20363b4463642fc8ca235d5b220e46e5b55c655e435f20be24295391b0070db3a78d45210ac9c27f5e7bbab
DIST tailscale-1.68.0-deps.tar.xz 475022544 BLAKE2B 9bc68ff79c11457387c0f665eca9a74c0e7945f8d7a23a053cbafb91ccf2ae94bd13a1b9c9b26bcfafd52b250aecf6571b65c089d0a87c5e9af2dfa7d8327026 SHA512 c6814f4aaeb80aa3982b7fa893090026587a1d48beccdce2589cec55c1611f5e0c9394e52aaf70995621808cb0cbefd275e3b6050d24a9354c52b5bb8345a46d
DIST tailscale-1.68.0.tar.gz 2721807 BLAKE2B ffb6b4cc36473195587a8fc7a3142e1e7c73a5ccd50dc1fe8b26f3d0b69feb476e339a9bb66b2836823090c48a12b79e5bdbf54af96e4603464d70837ae0e7d0 SHA512 b63ee338e2a75d5be3b3c9c7446db178c66f326aea074bb1cdd18d7f1aa5fa720b0cafd5ff07a3665bb403d05d22c8f4cf0fa9638a5a87b08b6b617bd5795ee8
DIST tailscale-1.68.1-deps.tar.xz 475973944 BLAKE2B 9cb7cf0e8d608eaec21dda674c37b3f52a9b31a41b9676fbfced24d3dbe51cbdec8af9accdb1a83d104a5f3e73e43903567168aa19467517d6445f27e0bd3b63 SHA512 849c81b39b563c88a69e2e74d7d7e57aa3c2f1b1bd50cb5801765c0c4a211116692224a0a925c7c89a905fbe5c90a28657259170e44c7166b55f543db2a6f243

View file

@ -1,60 +0,0 @@
# Copyright 2020-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit go-module systemd tmpfiles
# These settings are obtained by running ./build_dist.sh shellvars in
# the upstream repo.
VERSION_MINOR="66"
VERSION_SHORT="1.66.4"
VERSION_LONG="1.66.4-te64efe4f7"
VERSION_GIT_HASH="e64efe4f777cb5b4d9efd603ad1360a509006cd1"
DESCRIPTION="Tailscale vpn client"
HOMEPAGE="https://tailscale.com"
SRC_URI="https://github.com/tailscale/tailscale/archive/v${PV}.tar.gz -> ${P}.tar.gz"
SRC_URI+=" https://gentoo.rgst.io/updater_artifacts/${CATEGORY}/${PN}/${PV}/deps.tar.xz -> ${P}-deps.tar.xz"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm arm64 ~riscv ~x86"
RDEPEND="net-firewall/iptables"
BDEPEND=">=dev-lang/go-1.22"
RESTRICT="test"
# This translates the build command from upstream's build_dist.sh to an
# ebuild equivalent.
build_dist() {
ego build -tags xversion -ldflags "
-X tailscale.com/version.Long=${VERSION_LONG}
-X tailscale.com/version.Short=${VERSION_SHORT}
-X tailscale.com/version.GitCommit=${VERSION_GIT_HASH}" "$@"
}
src_compile() {
build_dist ./cmd/tailscale
build_dist ./cmd/tailscaled
}
src_install() {
dosbin tailscaled
dobin tailscale
systemd_dounit cmd/tailscaled/tailscaled.service
insinto /etc/default
newins cmd/tailscaled/tailscaled.defaults tailscaled
keepdir /var/lib/${PN}
fperms 0750 /var/lib/${PN}
newtmpfiles "${FILESDIR}/${PN}.tmpfiles" ${PN}.conf
newinitd "${FILESDIR}/${PN}d.initd" ${PN}
newconfd "${FILESDIR}/${PN}d.confd" ${PN}
}
pkg_postinst() {
tmpfiles_process ${PN}.conf
}

View file

@ -41,16 +41,10 @@ net-vpn/tailscale:
steps:
- checkout: https://github.com/tailscale/tailscale
- original_ebuild: new.ebuild
- generate_go_deps
- command: |-
set -euxo pipefail
GO_VERSION=$(grep "^go" go.mod | awk '{ print $2 }' | awk -F '.' '{ print $1"."$2}')
mise use -g golang@"${GO_VERSION}"
# Create the dependency tar.
GOMODCACHE="${PWD}"/go-mod go mod download -modcacherw
XZ_OPT=-e9T0 tar cJf deps.tar.xz go-mod
# Get the shell variables and rewrite the ebuild to contain
# them.
eval "$(./build_dist.sh shellvars)"
@ -58,8 +52,6 @@ net-vpn/tailscale:
sed -i 's/VERSION_SHORT=".*"/VERSION_SHORT="'"${VERSION_SHORT}"'"/' new.ebuild
sed -i 's/VERSION_LONG=".*"/VERSION_LONG="'"${VERSION_LONG}"'"/' new.ebuild
sed -i 's/VERSION_GIT_HASH=".*"/VERSION_GIT_HASH="'"${VERSION_GIT_HASH}"'"/' new.ebuild
sed -i 's|dev-lang\/go-.*|dev-lang\/go-'"${GO_VERSION}"'"|' new.ebuild
- upload_artifact: deps.tar.xz
- ebuild: new.ebuild
app-admin/chezmoi:
@ -72,22 +64,14 @@ app-admin/chezmoi:
steps:
- checkout: https://github.com/twpayne/chezmoi
- original_ebuild: new.ebuild
- generate_go_deps
- command: |-
set -euxo pipefail
GO_VERSION=$(grep "^go" go.mod | awk '{ print $2 }' | awk -F '.' '{ print $1"."$2}')
mise use -g golang@"${GO_VERSION}"
# Create the dependency tar.
GOMODCACHE="${PWD}"/go-mod go mod download -modcacherw
XZ_OPT=-e9T0 tar cJf deps.tar.xz go-mod
# Get the shell variables and rewrite the ebuild to contain
# them.
VERSION_GIT_HASH=$(go run assets/scripts/generate-commit.go)
sed -i 's/VERSION_GIT_HASH=".*"/VERSION_GIT_HASH="'"${VERSION_GIT_HASH}"'"/' new.ebuild
sed -i 's|dev-lang\/go-.*|dev-lang\/go-'"${GO_VERSION}"'"|' new.ebuild
- upload_artifact: deps.tar.xz
- ebuild: new.ebuild
@ -101,17 +85,7 @@ dev-util/glab:
steps:
- checkout: https://gitlab.com/gitlab-org/cli
- original_ebuild: new.ebuild
- command: |-
set -euxo pipefail
GO_VERSION=$(grep "^go" go.mod | awk '{ print $2 }' | awk -F '.' '{ print $1"."$2}')
mise use -g golang@"${GO_VERSION}"
# Create the dependency tar.
GOMODCACHE="${PWD}"/go-mod go mod download -modcacherw
XZ_OPT=-e9T0 tar cJf deps.tar.xz go-mod
sed -i 's|dev-lang\/go-.*|dev-lang\/go-'"${GO_VERSION}"'"|' new.ebuild
- generate_go_deps
- upload_artifact: deps.tar.xz
- ebuild: new.ebuild
@ -125,16 +99,6 @@ dev-util/doppler:
steps:
- checkout: https://github.com/DopplerHQ/cli
- original_ebuild: new.ebuild
- command: |-
set -euxo pipefail
GO_VERSION=$(grep "^go" go.mod | awk '{ print $2 }' | awk -F '.' '{ print $1"."$2}')
mise use -g golang@"${GO_VERSION}"
# Create the dependency tar.
GOMODCACHE="${PWD}"/go-mod go mod download -modcacherw
XZ_OPT=-e9T0 tar cJf deps.tar.xz go-mod
sed -i 's|dev-lang\/go-.*|dev-lang\/go-'"${GO_VERSION}"'"|' new.ebuild
- generate_go_deps
- upload_artifact: deps.tar.xz
- ebuild: new.ebuild

View file

@ -1,6 +1,7 @@
#!/usr/bin/env bash
# Updates the chromium package to use the versions inside from the
# gentoo repository while persisting the patches we need.
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"