From 74c39ca79513829dff1e79147254cad18e05a75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Felipe=20Barco=20Santa?= Date: Fri, 10 Jun 2022 15:51:13 -0500 Subject: [PATCH 1/5] Added build tests for generating multiple targets These builds are useful for intensively test the platform - One genrule creating dummy text files - One genrule for copying pdf copies - One genrule for copying compressed files - One genrule for copying iso images --- WORKSPACE | 16 +++++++++++ genrules/BUILD | 56 +++++++++++++++++++++++++++++++++++++ genrules/gnu-manifesto.pdf | Bin 0 -> 76612 bytes 3 files changed, 72 insertions(+) create mode 100644 genrules/BUILD create mode 100644 genrules/gnu-manifesto.pdf diff --git a/WORKSPACE b/WORKSPACE index e69de29b..37ad2b27 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -0,0 +1,16 @@ +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") + +# Files used in the genrule tests (see genrules/BUILD) +http_file( + name = "emacs", + urls = ["https://mirror.its.dal.ca/gnu/emacs/emacs-28.1.tar.gz", + "https://mirrors.kernel.org/gnu/emacs/emacs-28.1.tar.gz"], + sha256 = "1439bf7f24e5769f35601dbf332e74dfc07634da6b1e9500af67188a92340a28" +) + +http_file( + name = "ubuntu_20.04_1.3GB", + urls = ["https://mirror.math.princeton.edu/pub/ubuntu-iso/focal/ubuntu-20.04.4-live-server-amd64.iso", + "https://mirror.pit.teraswitch.com/ubuntu-releases/focal/ubuntu-20.04.4-live-server-amd64.iso"], + sha256 = "28ccdb56450e643bad03bb7bcf7507ce3d8d90e8bf09e38f6bd9ac298a98eaad" +) diff --git a/genrules/BUILD b/genrules/BUILD new file mode 100644 index 00000000..b79ae39c --- /dev/null +++ b/genrules/BUILD @@ -0,0 +1,56 @@ +# Copyright 2021 EngFlow Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# NOTE +# The following genrules allow for an intensive test on the building system +# as they create thousands of targets to be specified in few lines of code. +# WARNING: Be careful with the number of targets created as it may be +# to much for the current free-tier configuration. +# Maximum of targets tested so far: 30000 (pdf file) +# +# Change the upper bound of the range and enjoy! +# + +# Text files with size 4KB +[genrule( + name = "foo_text" + str(x), + outs = ["foo_text" + str(x) + ".txt"], + cmd = "echo 'Hello engflow world' > $@", +) for x in range(1,10000)] + +# PDF document with size 76KB +[genrule( + name = "gnu-manifesto" + str(x), + outs = ["gnu-manifesto" + str(x) + ".pdf"], + cmd = "cp $(location gnu-manifesto.pdf) $@", + tools = ["gnu-manifesto.pdf"] +) for x in range(1,1001)] + +# Emacs text editor with size 68MB +[genrule( + name = "emacs" + str(x), + outs = ["emacs" + str(x) + ".tar.gz"], + cmd = "cp $(location @emacs//file) $@", + tools = ["@emacs//file"] +) for x in range(1,1001)] + +# Large sized files are hard. Size limit 2GB. +# Ubuntu live with size 1.3GB. +[genrule( + name = "ubuntu_20.04_1.3GB" + str(x), + outs = ["ubuntu_20.04_1.3GB" + str(x) + ".iso"], + cmd = "cp $(location @ubuntu_20.04_1.3GB//file) $@", + tools = ["@ubuntu_20.04_1.3GB//file"] +) for x in range(1,3)] \ No newline at end of file diff --git a/genrules/gnu-manifesto.pdf b/genrules/gnu-manifesto.pdf new file mode 100644 index 0000000000000000000000000000000000000000..53a3a0f124c42aafc60467152a8cd0efce9dc66d GIT binary patch literal 76612 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 Date: Fri, 10 Jun 2022 15:55:58 -0500 Subject: [PATCH 2/5] Added newline --- genrules/BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genrules/BUILD b/genrules/BUILD index b79ae39c..bfc589e6 100644 --- a/genrules/BUILD +++ b/genrules/BUILD @@ -53,4 +53,4 @@ outs = ["ubuntu_20.04_1.3GB" + str(x) + ".iso"], cmd = "cp $(location @ubuntu_20.04_1.3GB//file) $@", tools = ["@ubuntu_20.04_1.3GB//file"] -) for x in range(1,3)] \ No newline at end of file +) for x in range(1,3)] From 3bcf659cf9b035b277644e00a0a3976c67c3c9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Felipe=20Barco=20Santa?= Date: Fri, 10 Jun 2022 17:07:45 -0500 Subject: [PATCH 3/5] Updated number of generated targets --- genrules/BUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/genrules/BUILD b/genrules/BUILD index bfc589e6..2f641668 100644 --- a/genrules/BUILD +++ b/genrules/BUILD @@ -28,7 +28,7 @@ name = "foo_text" + str(x), outs = ["foo_text" + str(x) + ".txt"], cmd = "echo 'Hello engflow world' > $@", -) for x in range(1,10000)] +) for x in range(1,101)] # PDF document with size 76KB [genrule( @@ -36,7 +36,7 @@ outs = ["gnu-manifesto" + str(x) + ".pdf"], cmd = "cp $(location gnu-manifesto.pdf) $@", tools = ["gnu-manifesto.pdf"] -) for x in range(1,1001)] +) for x in range(1,101)] # Emacs text editor with size 68MB [genrule( @@ -44,7 +44,7 @@ outs = ["emacs" + str(x) + ".tar.gz"], cmd = "cp $(location @emacs//file) $@", tools = ["@emacs//file"] -) for x in range(1,1001)] +) for x in range(1,101)] # Large sized files are hard. Size limit 2GB. # Ubuntu live with size 1.3GB. @@ -53,4 +53,4 @@ outs = ["ubuntu_20.04_1.3GB" + str(x) + ".iso"], cmd = "cp $(location @ubuntu_20.04_1.3GB//file) $@", tools = ["@ubuntu_20.04_1.3GB//file"] -) for x in range(1,3)] +) for x in range(1,2)] From b762a287e9b435a781c2a31b1737307ac6b330b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Felipe=20Barco=20Santa?= Date: Mon, 13 Jun 2022 20:28:20 -0500 Subject: [PATCH 4/5] Removed comments and added shared variable for genrule tests --- WORKSPACE | 1 - genrules/BUILD | 30 +++++++++--------------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 37ad2b27..27bbd089 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,6 +1,5 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file") -# Files used in the genrule tests (see genrules/BUILD) http_file( name = "emacs", urls = ["https://mirror.its.dal.ca/gnu/emacs/emacs-28.1.tar.gz", diff --git a/genrules/BUILD b/genrules/BUILD index 2f641668..e37fe576 100644 --- a/genrules/BUILD +++ b/genrules/BUILD @@ -12,42 +12,30 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# The following genrules are able to produce thousands of targets based +# on the user's input. Change the upper bound of the range and enjoy! # -# NOTE -# The following genrules allow for an intensive test on the building system -# as they create thousands of targets to be specified in few lines of code. -# WARNING: Be careful with the number of targets created as it may be -# to much for the current free-tier configuration. -# Maximum of targets tested so far: 30000 (pdf file) -# -# Change the upper bound of the range and enjoy! -# - -# Text files with size 4KB +UPPER_BOUND = 10 [genrule( - name = "foo_text" + str(x), + name = "foo_TXT_4KB_" + str(x), outs = ["foo_text" + str(x) + ".txt"], cmd = "echo 'Hello engflow world' > $@", -) for x in range(1,101)] +) for x in range(1,UPPER_BOUND)] -# PDF document with size 76KB [genrule( - name = "gnu-manifesto" + str(x), + name = "gnu-manifesto_PDF_76KB" + str(x), outs = ["gnu-manifesto" + str(x) + ".pdf"], cmd = "cp $(location gnu-manifesto.pdf) $@", tools = ["gnu-manifesto.pdf"] -) for x in range(1,101)] +) for x in range(1,UPPER_BOUND)] -# Emacs text editor with size 68MB [genrule( - name = "emacs" + str(x), + name = "emacs_TARGZ_68MB" + str(x), outs = ["emacs" + str(x) + ".tar.gz"], cmd = "cp $(location @emacs//file) $@", tools = ["@emacs//file"] -) for x in range(1,101)] +) for x in range(1,UPPER_BOUND)] -# Large sized files are hard. Size limit 2GB. -# Ubuntu live with size 1.3GB. [genrule( name = "ubuntu_20.04_1.3GB" + str(x), outs = ["ubuntu_20.04_1.3GB" + str(x) + ".iso"], From 052b8a2c661b8c4ee497e22478e4081298f1ac39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Felipe=20Barco=20Santa?= Date: Mon, 13 Jun 2022 20:30:26 -0500 Subject: [PATCH 5/5] Added one more comment and changed 2021 for 2022 --- genrules/BUILD | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/genrules/BUILD b/genrules/BUILD index e37fe576..70125bb3 100644 --- a/genrules/BUILD +++ b/genrules/BUILD @@ -1,4 +1,4 @@ -# Copyright 2021 EngFlow Inc. All rights reserved. +# Copyright 2022 EngFlow Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,8 +13,9 @@ # limitations under the License. # # The following genrules are able to produce thousands of targets based -# on the user's input. Change the upper bound of the range and enjoy! -# +# on the user's input. +# This can be used for stress testing your build infrastructure. +# Change the upper bound of the range and enjoy! UPPER_BOUND = 10 [genrule( name = "foo_TXT_4KB_" + str(x),