This is an automated email from the ASF dual-hosted git repository.

areusch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new e09e9398e7 [ci] Add a tag to generated Jenkinsfile (#10825)
e09e9398e7 is described below

commit e09e9398e7e6c964326c298681afd9e1cfc39e82
Author: driazati <[email protected]>
AuthorDate: Wed Apr 6 11:00:49 2022 -0700

    [ci] Add a tag to generated Jenkinsfile (#10825)
    
    This adds a timestamp to the generated Jenkinsfile that is ignored when 
`--check`-ing. This line should generate merge conflicts for updates that would 
not pass `--check` in CI on main, so PRs will need to be rebased and the 
Jenkinsfile regenerated.
    
    Co-authored-by: driazati <[email protected]>
---
 Jenkinsfile            | 22 ++++++++++++++++++++++
 jenkins/Jenkinsfile.j2 | 22 ++++++++++++++++++++++
 jenkins/generate.py    | 15 +++++++++++++--
 3 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index f685be9fdd..34835397e3 100755
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -43,6 +43,9 @@
 // This file is generated by 'jenkins/generate.py'. Do not edit this file 
directly!
 // Make edits to 'jenkins/Jenkinsfile.j2' and regenerate this with
 // 'python3 jenkins/generate.py'
+// Note: This timestamp is here to ensure that updates to the Jenkinsfile are
+// always rebased on main before merging:
+// Generated at 2022-03-30T11:40:52.107833
 
 import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
 // NOTE: these lines are scanned by docker/dev_common.sh. Please update the 
regex as needed. -->
@@ -82,6 +85,7 @@ tvm_multilib = 'build/libtvm.so, ' +
 
 tvm_multilib_tsim = 'build/libvta_tsim.so, ' +
                tvm_multilib
+upstream_revision = null
 
 // command to start a docker container
 docker_run = 'docker/bash.sh'
@@ -102,6 +106,24 @@ def init_git() {
     script: './tests/scripts/task_show_node_info.sh',
     label: 'Show executor node info',
   )
+
+  // Determine merge commit to use for all stages
+  sh(
+    script: 'git fetch origin main',
+    label: 'Fetch upstream',
+  )
+  if (upstream_revision == null) {
+    upstream_revision = sh(
+      script: 'git log -1 FETCH_HEAD --format=\'%H\'',
+      label: 'Determine upstream revision',
+      returnStdout: true,
+    ).trim()
+  }
+  sh (
+    script: "git merge ${upstream_revision}",
+    label: 'Merge to origin/main'
+  )
+
   retry(5) {
     timeout(time: 2, unit: 'MINUTES') {
       sh (script: 'git submodule update --init -f', label: 'Update git 
submodules')
diff --git a/jenkins/Jenkinsfile.j2 b/jenkins/Jenkinsfile.j2
index 016432e2c5..b77befe474 100644
--- a/jenkins/Jenkinsfile.j2
+++ b/jenkins/Jenkinsfile.j2
@@ -43,6 +43,9 @@
 // This file is generated by 'jenkins/generate.py'. Do not edit this file 
directly!
 // Make edits to 'jenkins/Jenkinsfile.j2' and regenerate this with
 // 'python3 jenkins/generate.py'
+// Note: This timestamp is here to ensure that updates to the Jenkinsfile are
+// always rebased on main before merging:
+// Generated at {{ generated_time }}
 
 import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
 {% import 'jenkins/macros.j2' as m with context -%}
@@ -79,6 +82,7 @@ tvm_multilib = 'build/libtvm.so, ' +
 
 tvm_multilib_tsim = 'build/libvta_tsim.so, ' +
                tvm_multilib
+upstream_revision = null
 
 // command to start a docker container
 docker_run = 'docker/bash.sh'
@@ -99,6 +103,24 @@ def init_git() {
     script: './tests/scripts/task_show_node_info.sh',
     label: 'Show executor node info',
   )
+
+  // Determine merge commit to use for all stages
+  sh(
+    script: 'git fetch origin main',
+    label: 'Fetch upstream',
+  )
+  if (upstream_revision == null) {
+    upstream_revision = sh(
+      script: 'git log -1 FETCH_HEAD --format=\'%H\'',
+      label: 'Determine upstream revision',
+      returnStdout: true,
+    ).trim()
+  }
+  sh (
+    script: "git merge ${upstream_revision}",
+    label: 'Merge to origin/main'
+  )
+
   retry(5) {
     timeout(time: 2, unit: 'MINUTES') {
       sh (script: 'git submodule update --init -f', label: 'Update git 
submodules')
diff --git a/jenkins/generate.py b/jenkins/generate.py
index 95985b73dc..ba7f165925 100644
--- a/jenkins/generate.py
+++ b/jenkins/generate.py
@@ -17,10 +17,13 @@
 # under the License.
 import jinja2
 import argparse
-from pathlib import Path
 import difflib
+import re
+import datetime
 import textwrap
 
+from pathlib import Path
+
 
 REPO_ROOT = Path(__file__).resolve().parent.parent
 JENKINSFILE_TEMPLATE = REPO_ROOT / "jenkins" / "Jenkinsfile.j2"
@@ -65,6 +68,12 @@ data = {
 }
 
 
+def lines_without_generated_tag(content):
+    return [
+        line for line in content.splitlines(keepends=True) if not 
line.startswith("// Generated at")
+    ]
+
+
 if __name__ == "__main__":
     help = "Regenerate Jenkinsfile from template"
     parser = argparse.ArgumentParser(description=help)
@@ -74,6 +83,8 @@ if __name__ == "__main__":
     with open(JENKINSFILE) as f:
         content = f.read()
 
+    data["generated_time"] = datetime.datetime.now().isoformat()
+
     environment = jinja2.Environment(
         loader=jinja2.FileSystemLoader(REPO_ROOT),
         undefined=jinja2.StrictUndefined,
@@ -86,7 +97,7 @@ if __name__ == "__main__":
 
     diff = "".join(
         difflib.unified_diff(
-            content.splitlines(keepends=True), 
new_content.splitlines(keepends=True)
+            lines_without_generated_tag(content), 
lines_without_generated_tag(new_content)
         )
     )
     if args.check:

Reply via email to