Compare commits

...

66 Commits

Author SHA1 Message Date
clrbuilder 4a29a2d5c1 Update packages file for version 31140
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-10-01 06:40:52 +00:00
Patrick McCarty 81ef638151 autospec: establish different calling convention for setting cli booleans
For the `make autospec` variants, use a simpler calling convention so
that the callers do not need to know the boolean option names.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-09-29 13:30:41 -07:00
clrbuilder 50b8b07d34 Update packages file for version 31120
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-27 05:03:55 +00:00
clrbuilder 47b634bc75 Update packages file for version 31110
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-26 05:03:18 +00:00
clrbuilder 292ea0bde9 Update packages file for version 31100
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-25 05:04:12 +00:00
clrbuilder b0f7bbfb90 Update packages file for version 31090
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-24 05:03:00 +00:00
Patrick McCarty 20d0fece07 Add R-covr and R-lifecycle
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-09-23 12:46:13 -07:00
clrbuilder 0f546b20f5 Update packages file for version 31080
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-23 05:03:25 +00:00
clrbuilder 16a09f7fa6 Update packages file for version 31070
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-20 05:06:44 +00:00
clrbuilder 5a438328f2 Update packages file for version 31060
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-19 05:10:42 +00:00
clrbuilder 9ffb55be69 Update packages file for version 31050
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-18 05:03:03 +00:00
Patrick McCarty af3c84505d toplevel: set autospec pushurl to ssh instead of https
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-09-17 14:34:16 -07:00
clrbuilder a865a99283 Update packages file for version 31020
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-14 05:28:57 +00:00
clrbuilder 9e8f0a6ff0 Update packages file for version 31010
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-13 05:02:30 +00:00
clrbuilder 76301d4b78 Update packages file for version 31000
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-12 05:02:38 +00:00
clrbuilder 08bef91443 Update packages file for version 30990
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-11 05:03:26 +00:00
clrbuilder 93202eb3b5 Update packages file for version 30970
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-09 05:02:59 +00:00
clrbuilder 14977f527c Update packages file for version 30960
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-06 05:06:16 +00:00
clrbuilder fa93c354e1 Update packages file for version 30950
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-09-05 05:03:15 +00:00
Patrick McCarty 6a54f15cb6 Add new package: R-systemfonts
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-09-03 21:14:03 -07:00
clrbuilder fa42020aa9 Update packages file for version 30910
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-31 23:58:25 +00:00
clrbuilder a727fe3722 Update packages file for version 30900
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-30 05:03:46 +00:00
clrbuilder c41eeea37a Update packages file for version 30890
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-29 05:03:31 +00:00
clrbuilder a07f64294f Update packages file for version 30870
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-27 05:03:19 +00:00
clrbuilder 59a3a29c4c Update packages file for version 30840
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-22 05:02:48 +00:00
clrbuilder cba91e5044 Update packages file for version 30830
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-21 05:02:27 +00:00
Patrick McCarty a5d39507cc Merge tag 'refs/tags/30820' into master 2019-08-20 21:09:12 -07:00
clrbuilder dc644c29a0 Update packages file for version 30820
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-20 05:02:31 +00:00
clrbuilder f5febd9cd6 Update packages file for version 30810
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-17 05:02:00 +00:00
clrbuilder 33911b18e5 Update packages file for version 30800
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-16 05:02:20 +00:00
Patrick McCarty 13e5e26cbf Move manual setup steps to a separate file
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-08-14 17:57:18 -07:00
clrbuilder 4845303ae6 Update packages file for version 30780
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-14 05:03:31 +00:00
clrbuilder 6fdc492121 Update packages file for version 30740
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-10 05:02:49 +00:00
clrbuilder 7614474aba Update packages file for version 30720
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-08 18:20:52 +00:00
clrbuilder 5bee2e96d2 Update packages file for version 30710
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-08 05:02:42 +00:00
clrbuilder 6cc08f74e7 Update packages file for version 30700
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-07 05:03:04 +00:00
clrbuilder 5b64c9b888 Update packages file for version 30690
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-06 14:03:17 +00:00
clrbuilder 88c420528d Update packages file for version 30680
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-06 05:02:55 +00:00
clrbuilder 98c7c4cb76 Update packages file for version 30670
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-05 14:12:19 +00:00
clrbuilder e2ce4353b6 Update packages file for version 30660
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-03 05:03:25 +00:00
clrbuilder 08512d3f2b Update packages file for version 30620
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-08-01 05:06:06 +00:00
Patrick McCarty f6be3f440a Unzap the addition of GCC_IGNORE_WERROR lines
Once this line is added to a package spec, it is likely to never show up
again, and its initial appearance may have a significant impact on the
build, so it is good to keep to not lose context.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-31 20:55:30 -07:00
clrbuilder 1a79ab1700 Update packages file for version 30600
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-31 05:04:26 +00:00
clrbuilder a6fa6599bb Update packages file for version 30580
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-30 05:23:32 +00:00
Patrick McCarty 9d6c5e6677 Fix call to the go-builder wrapper script
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-29 17:44:24 -07:00
William Douglas 460ce05217 Add go-builder.py and autospecnewgo target
This change enables recurive dependency resolution and packaging when
creating new go packages. To do so the 'autospecnewgo' target is
created and the autospecnew target is slightly modified to align
make target exit code expectations for failure handling.
2019-07-29 17:44:24 -07:00
William Douglas 8a2da3412d Add repostage target
When building large numbers of packages that are interdependent,
recreating the rpm repository for each package can create a large
overhead during processing. 'repostage' is intended to provide an
intermediate target for adding a package to a repository that can
later be built using localrepocreate.
2019-07-29 17:44:24 -07:00
clrbuilder 94624262ae Update packages file for version 30570
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-29 14:07:14 +00:00
clrbuilder 15a220803f Update packages file for version 30550
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-26 22:33:53 +00:00
Patrick McCarty 4130c1c97d Add new package R-mvnfast
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-25 12:18:01 -07:00
Patrick McCarty 7c28f0608d Add new package R-linprog
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-25 11:37:50 -07:00
clrbuilder 1b0945c33d Update packages file for version 30530
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-25 18:04:39 +00:00
Patrick McCarty 1300eba2b4 Refresh SPDX license list
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-23 15:53:16 -07:00
clrbuilder 91a900675e Update packages file for version 30490
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-23 16:02:12 +00:00
clrbuilder b137543491 Update packages file for version 30480
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-23 08:02:29 +00:00
clrbuilder bb27567407 Update packages file for version 30470
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-22 17:05:41 +00:00
clrbuilder 2973364b2e Update packages file for version 30460
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-20 16:36:42 +00:00
clrbuilder 865997ad69 Update packages file for version 30450
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-19 08:02:20 +00:00
clrbuilder 70bfbe8c17 Update packages file for version 30440
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-18 08:02:19 +00:00
Patrick McCarty 3b1e4e5558 pullrebase: skip rebase if current branch is up-to-date
Any attempt at rebasing is unnecessary when the current branch is
up-to-date with the remote, so skip the rebase in this case.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2019-07-17 12:54:04 -07:00
clrbuilder 2465219907 Update packages file for version 30420
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-17 16:15:58 +00:00
clrbuilder 77775f060c Update packages file for version 30410
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-16 18:03:37 +00:00
clrbuilder 67406f7be2 Update packages file for version 30400
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-16 10:01:43 +00:00
clrbuilder 9bece241c0 Update packages file for version 30380
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-15 10:02:02 +00:00
clrbuilder 602cc9563f Update packages file for version 30360
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2019-07-13 17:54:20 +00:00
George T Kramer 02b5ad93e3 Place koji user configuration in user folder
Avoid placing koji.conf in a system-level directory

Signed-off-by: George T Kramer <george.t.kramer@intel.com>
2019-07-11 17:10:09 -07:00
9 changed files with 1016 additions and 84 deletions
+31 -3
View File
@@ -143,6 +143,10 @@ pullrebase:
echo "No commits exist in remote. Continuing."; \
exit 0; \
fi; \
if [ "$$(git rev-list FETCH_HEAD | head -n 1)" = "$$(git rev-list HEAD | head -n 1)" ]; then \
echo "Current branch up-to-date. Continuing."; \
exit 0; \
fi; \
echo "Rebasing to origin/master"; \
if git status --porcelain | grep -q '^.[^?]'; \
then \
@@ -177,7 +181,9 @@ autospec: preautospec-checks pullrebase localreponotice clean-old-content
--mock-config $(MOCK_CONFIG_VAL) \
--mock-opts "$(MOCK_OPTS)" \
$${SETVERSION:+ --version $${SETVERSION}} \
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
$${NON_INTERACTIVE:+ --non_interactive} \
$${SKIP_GIT:+ --skip-git} \
$${CLEANUP:+ -C} \
$(firstword $(NEWURL) $(URL));
$(MAKE) link-new-rpms PKG_REPO_DIR="."
@$(MAKE) spdxcheck
@@ -202,12 +208,12 @@ for-review.txt:
#help autospecnogit: Runs autospec, but does not create a commit
autospecnogit:
$(MAKE) SKIP_GIT=--skip-git autospec
$(MAKE) autospec SKIP_GIT=1
#help autospecnostate: Runs autospec, but cleans up mock chroots
#help and disables interactive mode.
autospecnostate:
$(MAKE) CLEANUP=-C NON_INTERACTIVE=--non_interactive autospec
$(MAKE) autospec CLEANUP=1 NON_INTERACTIVE=1
scanlicense:
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py -t . --config $(AUTOSPEC_CONF) --license-only $(firstword $(NEWURL) $(URL)) --name $(PKG_NAME)
@@ -374,6 +380,28 @@ repoadd: $(TOPLVL)/repo
$(MAKE) localrepocreate
$(call localrepoenable,${PM_CONF},${MOCK_CONF})
#help repostage: Stages locally-built RPMs for this package to the local RPM
#help directory. If this directory does not yet exist, it is created and
#help enabled.
repostage: $(TOPLVL)/repo
@if [ -z "${LATEST_RPMS}" ]; then \
echo "No rpms found in rpms/ directory."; \
exit 1; \
fi; \
if [ -f .repo-index ]; then \
echo "Cleaning old rpms:"; \
for r in `cat .repo-index`; do \
echo "-$$r"; \
rm -f $(TOPLVL)/repo/$$r; \
done; \
rm .repo-index; \
fi; \
for r in ${LATEST_RPMS}; do \
echo "+$$r"; \
echo $$(basename $$r) >> .repo-index; \
ln -f $$r $(TOPLVL)/repo/; \
done
#help repodel: Removes RPMs from the local RPM repository that were
#help previously added by 'make repoadd' for this package.
repodel:
+50 -2
View File
@@ -34,7 +34,7 @@ $(proj_PKGS):
git clone $(PRJ_BASE_URL)/$$proj projects/$$proj; \
cd projects/$$proj; \
if [ "$$proj" = "autospec" ] ; then \
git remote set-url --push origin https://github.com/clearlinux/autospec.git; \
git remote set-url --push origin git@github.com:clearlinux/autospec.git; \
else \
$(call gitoliteurl,projects/$$proj); \
fi; \
@@ -83,7 +83,7 @@ ${PULL_PKGS}:
git --no-pager log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit $$O..$$N; echo; \
fi ; \
if [ "$$p" = "projects/autospec" ] ; then \
git remote set-url --push origin https://github.com/clearlinux/autospec.git; \
git remote set-url --push origin git@github.com:clearlinux/autospec.git; \
else \
$(call gitoliteurl,$$p); \
fi ; \
@@ -233,6 +233,54 @@ autospecnew: preautospecnew-checks localreponotice
printf "** NOTICE: A patch with changes is available in the file $(TOPLVL)/packages/$(NAME)/for-review.txt\n"; \
printf "** Please look through this file and if you are unsure, please submit for code review with git send-email\n"; \
printf "**\n\n"; \
else \
echo "Autospec of $(NAME) failed."; \
exit 1; \
fi; \
else \
echo "$(NAME) already exists at $(TOPLVL)/packages/$(NAME)"; \
exit 1; \
fi
#help autospecnewgo: Creates a new autospec package with (dependencies)
#help for a given URL=$(URL) with NAME=$(NAME). Several files used by
#help autospec will be created in the help process.
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options
#help to autospec.
#help For more information about autospec, see the project page on Github https://github.com/clearlinux/autospec
autospecnewgo: preautospecnew-checks localreponotice
@if [ -z $(NAME) ] || [ -z $(URL) ]; then \
echo "Please specify NAME and URL. The ARCHIVES variable is optional."; \
exit 1; \
fi
-$(MAKE) clone_$(NAME)
@if [ ! -d $(TOPLVL)/packages/$(NAME)/.git ]; then \
echo "no remote repository found, creating new package repository and running autospec"; \
mkdir -p $(TOPLVL)/packages/$(NAME); \
( \
cd $(TOPLVL)/packages/$(NAME); \
git init; \
git remote add origin $(PKG_BASE_URL)/$(NAME); \
$(call gitoliteurl,packages/$(NAME)); \
$(call subjectprefix,$(NAME)); \
); \
printf 'PKG_NAME := %s\nURL = %s\nARCHIVES = %s\n\ninclude ../common/Makefile.common\n' $(NAME) '$(value URL)' '$(value ARCHIVES)' > $(TOPLVL)/packages/$(NAME)/Makefile; \
python3 $(TOPLVL)/projects/common/go-builder.py \
--target packages/$(NAME) \
--integrity \
--config "$(AUTOSPEC_CONF)" \
--name $(NAME) \
--archives $(ARCHIVES) \
--mock-config $(MOCK_CONFIG_VAL) \
--mock-opts "$(MOCK_OPTS)" \
$(URL); \
if [ $$? -eq 0 ]; then \
$(MAKE) link-new-rpms PKG_REPO_DIR="${TOPLVL}/packages/${NAME}"; \
$(TOPLVL)/projects/common/checkblacklist.sh $(TOPLVL)/projects/common/blacklist $(TOPLVL)/packages/${NAME}/results/*.rpm; \
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show) > $(TOPLVL)/packages/$(NAME)/for-review.txt; \
python3 $(TOPLVL)/projects/common/patchfilter.py <(git -C $(TOPLVL)/packages/$(NAME) show); \
else \
exit 1; \
fi; \
else \
echo "$(NAME) already exists at $(TOPLVL)/packages/$(NAME)"; \
+40
View File
@@ -0,0 +1,40 @@
## Advanced topics
### Manual setup
If you did not run the user-setup script (see "Automated setup" section in the
[main README](README.md), you will want to set up the developer tooling
workspace manually. This section provides general documentation for the manual
setup process, and it is not meant to be exhaustive.
On your Clear Linux system, create a workspace for Clear Linux development
work:
```
$ mkdir clearlinux
```
Clone this repo into a `projects` directory within the workspace:
```
$ cd clearlinux
$ mkdir projects
$ git clone https://github.com/clearlinux/common projects/common
```
Create the toplevel tooling Makefile:
```
$ ln -s projects/common/Makefile.toplevel Makefile
```
Clone all Clear Linux package and project repositories:
```
$ make clone
```
Note: You can clone the repos in parallel by using make's `-j` option.
At this point, the `packages` directory will contain all Clear Linux package
repos, and `projects` will contain common, clr-bundles, and autospec repos.
+1 -36
View File
@@ -152,39 +152,4 @@ If `Makefile.config.site_local` doesn't exist already, create it.
### Manual setup
If you did not run the user-setup script (see "Automated setup" section above),
you will want to set up the developer tooling workspace manually. This section
provides general documentation for the manual setup process, and it is not
meant to be exhaustive.
On your Clear Linux system, create a workspace for Clear Linux development
work:
```
$ mkdir clearlinux
```
Clone this repo into a `projects` directory within the workspace:
```
$ cd clearlinux
$ mkdir projects
$ git clone https://github.com/clearlinux/common projects/common
```
Create the toplevel tooling Makefile:
```
$ ln -s projects/common/Makefile.toplevel Makefile
```
Clone all Clear Linux package and project repositories:
```
$ make clone
```
Note: You can clone the repos in parallel by using make's `-j` option.
At this point, the `packages` directory will contain all Clear Linux package
repos, and `projects` will contain common, clr-bundles, and autospec repos.
See the [Manual setup](README-advanced.md#manual-setup) documentation.
Executable
+285
View File
@@ -0,0 +1,285 @@
#!/usr/bin/env python3
#
# gowrap.py - part of autospec
# Copyright (C) 2019 Intel Corporation
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import argparse
import os
import shutil
import subprocess
import sys
import tempfile
def parse_args():
"""Parse commandline arguments."""
parser = argparse.ArgumentParser()
parser.add_argument("url", help="Location of package archive")
parser.add_argument("-t", "--target", dest="target", action="store",
default=None,
help="Target location to create or reuse")
parser.add_argument("-c", "--config", dest="config", action="store",
default="/usr/share/defaults/autospec/autospec.conf",
help="Set configuration file to use")
parser.add_argument("-n", "--name", action="store", dest="name", default="",
help="Override the package name")
parser.add_argument("-i", "--integrity", action="store_true",
default=False,
help="Search for package signature from source URL and "
"attempt to verify package")
parser.add_argument("-m", "--mock-config", action="store", default="clear",
help="Value to pass with Mock's -r option. Defaults to "
"\"clear\", meaning that Mock will use "
"/etc/mock/clear.cfg.")
parser.add_argument("-o", "--mock-opts", action="store", default="",
help="Arbitrary options to pass down to mock when "
"building a package.")
parser.add_argument('-a', "--archives", action="store",
dest="archives", default=[], nargs='*',
help="tarball URLs for additional source archives and"
" a location for the sources to be extacted to (e.g."
" http://example.com/downloads/dependency.tar.gz"
" /directory/relative/to/extract/root )")
return parser.parse_args()
def missing_dependencies(name):
"""Check if the build failed due to missing dependencies."""
root_log = os.path.join("packages", name, "results", "root.log")
if not os.path.exists(root_log):
return False
with open(root_log, "r") as lfile:
for line in lfile.readlines():
if "No matching package to install" in line:
return True
return False
def already_built(name, version):
"""Check if the package and version are already built."""
if not os.path.exists(os.path.join("packages", name, "rpms")):
return False
vpath = os.path.join("packages", name, "versions")
if not os.path.exists(vpath):
return False
with open(vpath, "r") as vfile:
if version not in [x.strip() for x in vfile.readlines()]:
return False
return True
def build(path, args, name, url, version):
"""Try and build a package."""
if version:
ver_arg = ["-v", version]
else:
ver_arg = []
if already_built(name, version):
return True
print(f"Trying to autospec {name} - {version}")
proc = subprocess.run(["python3",
f"{path}/../autospec/autospec/autospec.py", url,
"-c", args.config, "-t", f"packages/{name}",
"-n", name, "-m", args.mock_config,
"-o", args.mock_opts, "-i"] + ver_arg, capture_output=True)
if proc.returncode == 0:
subprocess.run(["make", "link-new-rpms", f"PKG_REPO_DIR=packages/{name}"],
capture_output=True)
return proc.returncode == 0
def parse_go_mod(path):
"""Parse go.mod file for build requirements.
File content looks as follows:
module example.com/foo/bar
require (
github.com/BurntSushi/toml v0.3.1
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999
github.com/inconshreveable/mousetrap v1.0.0 // indirect
"github.com/spf13/cobra" v0.0.3
github.com/spf13/pflag v1.0.3 // indirect
)
Need to handle all require lines including //indirect.
Skip requires that use .git for now. May need to be handled
differently.
"""
reqs = []
with open(path, "r") as gfile:
dep_start = False
for line in gfile.readlines():
# Ideally the mod file is generated and the format is
# always correct but add a few defenses just in case
line = line.strip()
if line.startswith("//"):
# Skip comments
continue
if dep_start:
# End of the require section
if line.startswith(")"):
break
req = line.split()[:2]
req[0] = req[0].replace('"', '')
if req[0].endswith(".git"):
continue
reqs.append(req)
continue
if line.startswith("require ("):
dep_start = True
return reqs
def get_dependencies(name):
"""Return path to the go.mod file if it exists."""
command = None
path = None
pdir = os.path.join("packages", name)
reqs = []
for fname in os.listdir(pdir):
# Find the archive
if fname.endswith("zip"):
command = ["unzip", fname]
elif ".tar." in fname:
command = ["tar", "xf", fname]
else:
command = None
if command:
# Decompress archive
tdir = tempfile.mkdtemp()
tfile = os.path.join(tdir, fname)
shutil.copyfile(os.path.join(pdir, fname), tfile)
proc = subprocess.run(command, cwd=tdir, capture_output=True)
if not proc.returncode:
# inspect contents for a "go.sum" file
for root, _, files in os.walk(tdir):
if "go.mod" in files:
path = f"{name}.gomod"
shutil.copyfile(os.path.join(root, "go.mod"), path)
reqs += parse_go_mod(path)
os.unlink(path)
shutil.rmtree(tdir)
return reqs
def encode_requirements(requirement):
"""Encode the project's module and version."""
# Default dependency base proxy url
base_url = "https://proxy.golang.org/"
# Encoding based on
# https://tip.golang.org/cmd/go/#hdr-Module_proxy_protocol
encoded_module = ""
for char in requirement[0]:
if char.isupper():
encoded_module += "!" + char.lower()
else:
encoded_module += char
encoded_version = ""
for char in requirement[1]:
if char.isupper():
encoded_version += "!" + char.lower()
else:
encoded_version += char
return (encoded_module, encoded_version)
def initialize_package(name, url, version, path, args):
"""Setup package and try to build it."""
if already_built(name, version):
return True
print(f"Trying to autospecnew {name} - {version}")
proc = subprocess.run(["make", "autospecnew", f"URL={url}", f"NAME={name}", f"SETVERSION={version}"], capture_output=True)
if f"{name} already exists at" in proc.stdout.decode("utf-8"):
return build(path, args, name, url, version)
return proc.returncode == 0
def build_recursive(path, args, name, url, version=None, success=None):
"""Try and recursively build packages."""
if not success:
# First package being built, common utilities already run
# so just use autospec directly
success = {}
ret = build(path, args, name, url, version)
else:
ret = initialize_package(name, url, version, path, args)
if ret:
# Completed so we are done!
return True
if not missing_dependencies(name):
# Failed but not due to missing dependencies, bail
print(f"Unknown error building {name} - {version}")
return False
reqs = get_dependencies(name)
if not reqs:
# Didn't try and add anything so don't need to build again
print(f"Build failed with no missing requirements: {name} - {version}")
return False
print(f"First attempt to build failed due to missing dependencies {name} - {version}\n")
for req in reqs:
ereq = encode_requirements(req)
rname = "go-" + req[0].replace("/", "-")
rurl = f"https://proxy.golang.org/{ereq[0]}/@v/list"
if (rname, req[1]) in success:
# Rebuild detected, figure out if it is okay or not
if success[(rname, req[1])]:
# Already succeeded building req short circuit success
continue
else:
# Encountered a build loop, bail out as this likely
# requires manual fixing
print(f"Detected build loop when building {rname} - {req[1]}")
return True
success[(rname, req[1])] = False
if not build_recursive(path, args, rname, rurl, req[1], success):
print(f"Failed to build dependency {rname} - {req[1]}")
return False
success[(rname, req[1])] = True
subprocess.run(["make", "repodel"], cwd=f"packages/{rname}", capture_output=True)
subprocess.run(["make", "repostage"], cwd=f"packages/{rname}", capture_output=True)
# Create the repo with the new packages added
subprocess.run(["make", "localrepocreate"], capture_output=True)
# Retry previously failed build assuming dependencies got added
print(f"Rebuilding after resolving dependencies {name} - {version}")
ret = build(path, args, name, url, version)
print("")
return ret
def main():
"""Start program execution."""
args = parse_args()
path = os.path.dirname(os.path.realpath(__file__))
return build_recursive(path, args, args.name, args.url)
if __name__ == '__main__':
if not main():
sys.exit(-1)
print("\n\nBuild completed\n\n")
+8
View File
@@ -46,6 +46,7 @@ BSD-3-Clause-LBNL
BSD-3-Clause-No-Nuclear-License
BSD-3-Clause-No-Nuclear-License-2014
BSD-3-Clause-No-Nuclear-Warranty
BSD-3-Clause-Open-MPI
BSD-4-Clause
BSD-4-Clause-UC
BSD-Protection
@@ -56,6 +57,7 @@ Barr
Beerware
BitTorrent-1.0
BitTorrent-1.1
BlueOak-1.0.0
Borceux
CATOSL-1.1
CC-BY-1.0
@@ -88,6 +90,7 @@ CC-BY-SA-2.0
CC-BY-SA-2.5
CC-BY-SA-3.0
CC-BY-SA-4.0
CC-PDDC
CC0-1.0
CDDL-1.0
CDDL-1.1
@@ -293,6 +296,7 @@ OpenSSL
PDDL-1.0
PHP-3.0
PHP-3.01
Parity-6.0.0
Plexus
PostgreSQL
Python-2.0
@@ -311,12 +315,15 @@ SCEA
SGI-B-1.0
SGI-B-1.1
SGI-B-2.0
SHL-0.5
SHL-0.51
SISSL
SISSL-1.2
SMLNJ
SMPPL
SNIA
SPL-1.0
SSPL-1.0
SWL
Saxpath
Sendmail
@@ -365,6 +372,7 @@ Zend-2.0
Zimbra-1.3
Zimbra-1.4
Zlib
blessing
bzip2-1.0.5
bzip2-1.0.6
copyleft-next-0.3.0
+599 -40
View File
File diff suppressed because it is too large Load Diff
-1
View File
@@ -225,7 +225,6 @@ def main():
zap_line_in_file_start(".spec", "Source99 :")
zap_line_in_file_start(".spec", "Source0 :")
zap_line_in_file_start(".spec", "export SOURCE_DATE_EPOCH")
zap_line_in_file_start(".spec", "export GCC_IGNORE_WERROR=1")
zap_line_in_file_start(".spec", "export AR=gcc-ar")
zap_line_in_file_start(".spec", "export RANLIB=gcc-ranlib")
zap_line_in_file_start(".spec", "export NM=gcc-nm")
+2 -2
View File
@@ -145,9 +145,9 @@ if [ "$USE_KOJI" ]; then
cp "$CLIENTCA" ~/.koji/clientca.crt
cp "$SERVERCA" ~/.koji/serverca.crt
if [ ! -f /etc/koji.conf ]; then
if [ ! -f ~/.koji/config ]; then
echo "Setting up koji config . . ."
sudo cp projects/common/conf/koji.conf /etc
cp -f projects/common/conf/koji.conf ~/.koji/config
fi
fi