diff --git a/builders/org.python.pydev.build/build_cmd.bat b/builders/org.python.pydev.build/build_cmd.bat deleted file mode 100644 index 6c984e12a9..0000000000 --- a/builders/org.python.pydev.build/build_cmd.bat +++ /dev/null @@ -1,118 +0,0 @@ -@echo Execute: - -@echo X:\liclipsews\liclipsews\Pydev\builders\org.python.pydev.build\build_cmd.bat - -@echo If needed to update version: -@echo x: -@echo cd X:\liclipsews\liclipsews\Pydev -@echo python update_version.py 3.6.0 - -@echo Note: instructions for properly updating the variables are in the end of the file -@echo The contents here may just be copied into cmd.exe or some other shell (just note that -@echo in some cases a call to git may stop executing, so, you may need to copy the commands in chunks). - -set BRANCH=master - -set DRIVE=x: -set BASE_LOCAL_PYDEV_GIT=X:\liclipsews\liclipsews\Pydev -set BUILD_DIR=X:\pydev_build\build_dir -set DEPLOY_DIR=X:\pydev_build\deploy_dir -set JAVA_HOME=D:\bin\jdk-17.0.8.1+1 -set MAVEN_BIN=X:\liclipsews\maven\apache-maven-3.9.5\bin -set GIT_EXECUTABLE="C:\Program Files\Git\bin\git.exe" -@echo Expected in env var: SIGN_KEYPASS -@echo Expected in env var: SIGN_STOREPASS -@echo Expected in env var: SIGN_ALIAS -@echo Expected in env var: SIGN_KEYSTORE -@echo Expected in env var: SIGN_STORETYPE -@echo Expected in env var: SIGN_TSA -SET MAVEN_OPTS=-Xmx1024m - - -set BASEOS=win32 -set BASEWS=win32 -set BASEARCH=x86 - -set PATH=C:\bin\FastCopy211;%PATH% -set PATH=C:\Windows\system32;%PATH% -set PATH=%MAVEN_BIN%;%PATH% -set PATH=%JAVA_HOME%\bin;%PATH% -set PATH="C:\Program Files\Git\bin\";%PATH% - - -@echo actual build command -mkdir %BUILD_DIR% -mkdir %DEPLOY_DIR% -%DRIVE% -cd %BUILD_DIR% -git clone %BASE_LOCAL_PYDEV_GIT% -@echo git clone git://github.com/fabioz/Pydev.git -- this could be used when building against the base git instead of a local git -cd Pydev -git reset --hard -git clean -f -d -x -git checkout -f -git remote update -git fetch -git checkout %BRANCH% -git pull origin %BRANCH% -git submodule foreach --recursive git reset --hard -git submodule foreach --recursive git clean -f -d -x -git submodule update --init --recursive -@echo If copied/pasted into cmd.exe, it will break here - -@echo Create builtin modules -set PYTHONPATH=%BUILD_DIR%/Pydev/plugins/org.python.pydev.core/pysrc -python %BUILD_DIR%/Pydev/plugins/org.python.pydev.core/pysrc/build_tools/build.py -python %BUILD_DIR%/Pydev/plugins/org.python.pydev.core/pysrc/build_tools/build_binaries_windows.py - -@echo to clean after the build: -DcleanAfter.set=true -mvn install -Dsign-release=true - - - - - -@echo Notes on customizing parameters / making the build: -@echo If signing is needed, then the keystore needs to be created before (see commands below) -@echo and also a variable named SIGN_STOREPASS must be set with the same password used when the keystore is created -@echo i.e.: set SIGN_STOREPASS=my store pass -@echo -@echo BRANCH: the branch to be used to do the build (e.g.: master/development/etc) -- it's recommended that you create your own branch from a base branch in pydev and use it -@echo -@echo BASE_LOCAL_PYDEV_GIT: The directory where you checked out Pydev from git (the folder containing the 'plugins, features, builders, .git') -@echo -@echo BUILD_DIR: The directory that should be created for the build (the contents of the BASE_LOCAL_PYDEV_GIT will be checked out to this directory for the build) -@echo -@echo DEPLOY_DIR: The directory where the final artifacts of the build will be put -@echo -@echo KEYSTORE: A keystore needs to be created and available at X:\release_tools\pydevkeystore -@echo -@echo %JAVA_HOME%\bin\keytool -genkey -dname "CN=Brainwy Software, OU=PyDev, O=Brainwy, L=Florianopolis, ST=SC, C=Brazil" -keystore X:\release_tools\pydevkeystore -alias pydev -validity 3650 -@echo %JAVA_HOME%\bin\keytool -selfcert -alias pydev -keystore X:\release_tools\pydevkeystore -validity 3650 -@echo %JAVA_HOME%\bin\keytool -export -keystore X:\release_tools\pydevkeystore -alias pydev -file pydev_certificate.cer -@echo -@echo To sign -@echo %JAVA_HOME%\bin\jarsigner -keystore X:\release_tools\pydevkeystore -storepass PASSUSED JAR_TO_SIGN pydev -@echo -@echo -@echo KEYSTORE_ALIAS: The alias used during the keystore creation -@echo -@echo JAVA_HOME: Where is your java located? (The directory containing 'bin, jre, COPYRIGHT, LICENSE') -@echo -@echo GIT_EXECUTABLE: The place where the git executable is located (in Windows your git.exe) -@echo -@echo ECLIPSE_CLEAN: The DIRECTORY containing your eclipse executable (note that it should be a clean install of the Eclipse SDK) -- it will be copied during the build -@echo -@echo LAUNCHER_PLUGIN: The plugin for the equinox launcher at your eclipse version (i.e.: org.eclipse.equinox.launcher_1.1.0.v20100507) -@echo -@echo BUILDER_PLUGIN: The plugin for the pde builder at your eclipse version (i.e.: org.eclipse.pde.build_3.6.0.v20100603) -@echo -@echo BASEOS: The platform (e.g.: win32, linux, macosx, solaris, etc) -@echo -@echo BASEWS: The windows system (e.g.: win32, gtk, motif, carbon) -@echo -@echo BASEARCH: The architechure (e.g.: x86, ppc, sparc) -@echo -@echo PATH: python, java, git, ant must be in the path -@echo Additionally for Windows, FastCopy (http://ipmsg.org/tools/fastcopy.html.en) is also required. -@echo diff --git a/plugins/com.python.pydev.docs/release_process.md b/plugins/com.python.pydev.docs/release_process.md new file mode 100644 index 0000000000..30bab59c84 --- /dev/null +++ b/plugins/com.python.pydev.docs/release_process.md @@ -0,0 +1,114 @@ +## Update the version: + +Open /dev.py, update the version and then run: + +cdd X:\liclipsews\liclipsews\Pydev\rootproject +activate py311_64 +python -m dev update_version +python -m dev update_typeshed +python -m dev update_pydevd_bins + +## Update homepage + +- index.rst +- download.contents.rst +- history_pydev.rst (move contents from index.rst if needed) + +python -m dev update_version_in_homepage +python x:\liclipsews\pydev.page\build_homepage.py + +## Commit everything and merge with master (homepage at: x:\liclipsews\pydev.page and X:\liclipsews\liclipsews\Pydev repo) + +mu acp "PyDev release 11.0.2" + +## Do build: + +python -m dev build_pydev_in_build_dir + +## Put things in the proper places and create zips to distribute + +python -m dev copy_and_zips + +## TODO: Finish automating steps below this line! + +## Submit feature and sources .zip in folder X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable to: + +"C:\Program Files\FileZilla FTP Client\filezilla.exe" sftp://fabioz,pydev@frs.sourceforge.net/home/pfs/project/p/py/pydev/pydev/ --local="X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable" + +Note: check pageant if it does not connect. + +Check if the main download button points to the proper place (not to the sources) -- +https://sourceforge.net/projects/pydev/files/pydev/PyDev 11.0.1/ -- choose file > file info > set default. + + +## Add contents to the update site + + +cd /D X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\ + +mkdir org.python.pydev.p2-repo-11.0.1-SNAPSHOT + +cd org.python.pydev.p2-repo-11.0.1-SNAPSHOT + +"C:\Program Files\7-Zip\7z" x ..\org.python.pydev.p2-repo-11.0.1-SNAPSHOT.zip + +cdd X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT +C:\Users\fabio\AppData\Roaming\npm\surge.cmd --domain pydev-11-0-1.surge.sh + +## Add update site to SourceForge (create directory with version and push it). + +"C:\Program Files\FileZilla FTP Client\filezilla.exe" sftp://fabioz,pydev@frs.sourceforge.net/home/project-web/pydev/htdocs/pydev_update_site --local="X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT" + + +## Tag repository: + +git tag pydev_11_0_1 -a -m "PyDev 11.0.1" +git push --tags + +## Create release in Github Releases + +SET CONVERT_SOURCE=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT +SET CONVERT_FINAL_ZIP=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable\PyDev 11.0.1.zip +SET CONVERT_TARGET_DIR=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\github +python X:\release_tools\convert_to_github.py 11.0.1 + + +## Goto: + +https://github.com/fabioz/Pydev/releases/new?tag=pydev_11_0_1 +Contents in: X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\github + +### Title: +PyDev 11.0.1 + +### Message: + +This release contains PyDev 11.0.1 + +It's possible to add it as an Eclipse update site using the url: + +https://github.com/fabioz/Pydev/releases/download/pydev_11_0_1/ + +Or get a .zip to install manually by unzipping it in the dropins: + +https://github.com/fabioz/Pydev/releases/download/pydev_11_0_1/PyDev.11.0.1.zip + + +## Update homepage: + +Update version in build_homepage.py +cd /D x:\liclipsews\pydev.page +python deploy.py + + +## update version in eclipse marketplace: http://marketplace.eclipse.org/ + +## Add news in forum (same as e-mail) + +## Send e-mail (use contents from sf e-mail -- change title sizes) + +## Add blog post + +## Add to reddit: http://www.reddit.com/r/Python/submit + +## Twitter diff --git a/plugins/com.python.pydev.docs/release_process.txt b/plugins/com.python.pydev.docs/release_process.txt deleted file mode 100644 index fdc8785689..0000000000 --- a/plugins/com.python.pydev.docs/release_process.txt +++ /dev/null @@ -1,144 +0,0 @@ ---------- For nightly --------- -Update the version: - -cd /d X:\liclipsews\liclipsews\Pydev -python update_version.py 11.0.1 - -x:\liclipsews\liclipsews\Pydev\builders\org.python.pydev.build\build_cmd.bat - - ---------- For full build --------- - Update the version: - - x: - cd x:\liclipsews\liclipsews\Pydev - python update_version.py 11.0.1 - - - # TODO: Get debugger binaries from modules in pypi (either during build or when - # the user starts up PyDev) so that the step below is not needed. - - Make sure debugger builtins are updated and commited: - - cd /D x:\liclipsews\liclipsews\Pydev\plugins\org.python.pydev.core\pysrc\ - set FORCE_PYDEVD_VC_VARS=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat - set PYTHONPATH=x:\liclipsews\liclipsews\Pydev\plugins\org.python.pydev.core\pysrc\ - python build_tools\build.py - - Update homepage - - index.rst - - download.contents.rst - - history_pydev.rst (move contents from index.rst if needed) - - Replace the referenced version in this file - - Update the version of all plugins to the new version. - - Run: - - Update version at x:\liclipsews\pydev.page\build_homepage.py - - Add version to update sites: - - pydev.page/homepage/update_sites/index.contents.rst_html - - x:\liclipsews\pydev.page\build_homepage.py - - Commit everything - Merge with master - - Check that - - C:\bin\Python38-32\python -c "import pydevd" - - throws an exception (it cannot be installed in the environment) - - Create tab in cmdermini: - activate py311_64 - set FORCE_PYDEVD_VC_VARS=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat - X:\liclipsews\liclipsews\Pydev\builders\org.python.pydev.build\build_cmd.bat - - Copy features and plugins folders from X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\repository to X:\pydev_build\update_site_dir\updates - -copy X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\repository\features\*.jar X:\pydev_build\update_site_dir\updates\features /Y -copy X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\repository\plugins\*.jar X:\pydev_build\update_site_dir\updates\plugins /Y - - ** Create zips to distribute - -x: -cd X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable -"C:\Program Files\7-Zip\7z" a -tzip -r "PyDev 11.0.1.zip" features plugins -cd X:\pydev_build\build_dir\pydev -git archive -o "X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable\PyDev 11.0.1-sources.zip" origin/master - - ** Submit feature and sources .zip in folder X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable to: - -"C:\Program Files\FileZilla FTP Client\filezilla.exe" sftp://fabioz,pydev@frs.sourceforge.net/home/pfs/project/p/py/pydev/pydev/ --local="X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable" - -Note: check pageant if it does not connect. - -Check if the main download button points to the proper place (not to the sources) -- -https://sourceforge.net/projects/pydev/files/pydev/PyDev 11.0.1/ -- choose file > file info > set default. - - - ** Add contents to the update site - - -cd /D X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\ - -mkdir org.python.pydev.p2-repo-11.0.1-SNAPSHOT - -cd org.python.pydev.p2-repo-11.0.1-SNAPSHOT - -"C:\Program Files\7-Zip\7z" x ..\org.python.pydev.p2-repo-11.0.1-SNAPSHOT.zip - -cdd X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT -C:\Users\fabio\AppData\Roaming\npm\surge.cmd --domain pydev-11-0-1.surge.sh - - Add update site to SourceForge (create directory with version and push it). - -"C:\Program Files\FileZilla FTP Client\filezilla.exe" sftp://fabioz,pydev@frs.sourceforge.net/home/project-web/pydev/htdocs/pydev_update_site --local="X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT" - - - ** Tag repository: - git tag pydev_11_0_1 -a -m "PyDev 11.0.1" - git push --tags - -SET CONVERT_SOURCE=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\org.python.pydev.p2-repo-11.0.1-SNAPSHOT -SET CONVERT_FINAL_ZIP=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\runnable\PyDev 11.0.1.zip -SET CONVERT_TARGET_DIR=X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\github -python X:\release_tools\convert_to_github.py 11.0.1 -Do GH release in: - https://github.com/fabioz/Pydev/releases/new?tag=pydev_11_0_1 - Contents in: X:\pydev_build\build_dir\pydev\features\org.python.pydev.p2-repo\target\github - - Title: - PyDev 11.0.1 - - Message: - - This release contains PyDev 11.0.1 - - It's possible to add it as an Eclipse update site using the url: - - https://github.com/fabioz/Pydev/releases/download/pydev_11_0_1/ - - Or get a .zip to install manually by unzipping it in the dropins: - - https://github.com/fabioz/Pydev/releases/download/pydev_11_0_1/PyDev.11.0.1.zip - - - ** Update homepage: - -Update version in build_homepage.py -cd /D x:\liclipsews\pydev.page -python deploy.py - - - ** update version in eclipse marketplace: http://marketplace.eclipse.org/ - - ** Add news in forum (same as e-mail) - - ** Send e-mail (use contents from sf e-mail -- change title sizes) - - ** Add blog post - - ** Add to reddit: http://www.reddit.com/r/Python/submit - - ** Twitter diff --git a/rootproject/.pydevproject b/rootproject/.pydevproject index f1d2317b31..f6faae62bd 100644 --- a/rootproject/.pydevproject +++ b/rootproject/.pydevproject @@ -1,8 +1,14 @@ + Default + python interpreter - + + + + /${PROJECT_DIR_NAME} + diff --git a/rootproject/dev.py b/rootproject/dev.py new file mode 100644 index 0000000000..83a7dc0133 --- /dev/null +++ b/rootproject/dev.py @@ -0,0 +1,217 @@ +''' +This is a helper to make PyDev releases. + +Requires: + +pip install fire + +to work. + +Note: paths are hardcoded for the machine doing the builds, it's windows-only +and relies on additional apps installed in the system. +''' +import fire +import os +from typing import Sequence, Callable +from pathlib import Path +import sys + +_VERSION = '11.0.1' + +_pydev_root = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + + +def _call(cmdline: str | Sequence[str]): + import subprocess + if not isinstance(cmdline, (list, tuple)): + cmdline = cmdline.split(' ') + subprocess.check_call(cmdline) + + +def _cmd(batch_commands:str, cwd=None): + import subprocess + import tempfile + + try: + with tempfile.NamedTemporaryFile(suffix=".bat", delete=False) as batch_file: + batch_file_path = batch_file.name + # Write batch commands to the temporary file + batch_file.write(batch_commands.encode('utf-8')) + + subprocess.check_call(['cmd', '/c', batch_file_path], cwd=cwd) + finally: + os.remove(batch_file_path) + + +def update_pydevd_bins(): + ''' + Make sure debugger builtins are updated and commited + + ## TODO: Get debugger binaries from modules in pypi (either during build or when + ## the user starts up PyDev) so that the step below is not needed. + ''' + pysrc = _pydev_root / 'plugins' / 'org.python.pydev.core' / 'pysrc' + + _cmd(f''' +set FORCE_PYDEVD_VC_VARS=C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Auxiliary/Build/vcvars64.bat +set PYTHONPATH={pysrc} +python build_tools/build.py +''', cwd=pysrc) + + +def update_version_in_homepage(): + # Add to build_homepage + build_py = Path('X:/liclipsews/pydev.page/build_homepage.py') + contents = build_py.read_text(encoding='utf-8') + lines = contents.splitlines() + iter_in = iter(lines) + for i, line in enumerate(iter_in): + if line.strip() == 'update_site_versions = [': + next_line = next(iter_in) + + expected = f" '{_VERSION}'," + if next_line.strip() != expected.strip(): + lines.insert(i + 1, expected) + print('CHANGED', build_py) + build_py.write_text('\n'.join(lines), 'utf-8') + break + else: + write_and_exit(f'Unable to find "update_site_versions = [" in {build_py}') + + # Add to pydev.page/homepage/update_sites/index.contents.rst_html + contents_path = Path('X:/liclipsews/pydev.page/homepage/update_sites/index.contents.rst_html') + + contents = contents_path.read_text(encoding='utf-8') + lines = contents.splitlines() + iter_in = iter(lines) + add = f'
  • http://www.pydev.org/update_sites/{_VERSION}
  • ' + search = '
  • dict[str, Callable]: + """Generate a dict of arguments to be called by fire.Fire()""" + globals_ = globals() + all_modules = set(sys.modules) + imported_modules = all_modules & set(globals_) + other_constants = set(globals_) - imported_modules + + return { + name: callable + for name in other_constants + if not name.startswith("_") # Exclude private constants + and isinstance((callable := globals_[name]), Callable) # Exclude non-callables + and callable.__module__ == "__main__" # Exclude imported callables + } + + +if __name__ == "__main__": + # Everything should be relative to /PyDev. + os.chdir(_pydev_root) + # Make Python Fire not use a pager when it prints a help text + fire.core.Display = lambda lines, out: out.write("\n".join(lines) + "\n") + fire.Fire(_gen_fire_args()) diff --git a/update_version.py b/update_version.py index 3f08a2b52c..62ccf7815c 100644 --- a/update_version.py +++ b/update_version.py @@ -1,12 +1,13 @@ import sys import os import re +from pathlib import Path def compare_lines(lines_obtained, lines_expected): import textwrap if lines_obtained == lines_expected: return - + msg = 'Lines differ.\n' diff_lines = [] lines_obtained.insert(0, '=== Obtained ===') @@ -30,7 +31,7 @@ def compare_lines(lines_obtained, lines_expected): line2 = l2[j] except: line2 = '' - + if i == 0: sep = ' ' else: @@ -71,7 +72,7 @@ def update_version(version): def fix_contents_version(contents, version): bugfixversion = int(re.sub(r'^\d+\.\d+\.(\d+)', r'\1', version)) nextversion = re.sub(r'^(\d+\.\d+\.)\d+', r'\1', version) + str(bugfixversion + 1) - + contents = re.sub(r'(bundle-version=")\[\d+\.\d+\.\d+,\d+\.\d+\.\d+\)"', r'\1[%s,%s)"' % (version, nextversion), contents) contents = re.sub(r'(version=)\"\d+\.\d+\.\d+(\.qualifier\")', r'\1"%s\2' % (version,), contents) contents = re.sub(r'(\d+\.\d+\.\d+(-SNAPSHOT)', r'\1>%s\2' % (version,), contents) @@ -82,7 +83,7 @@ def fix_contents_version(contents, version): def fix_liclipse_contents_version(contents, version): bugfixversion = int(re.sub(r'^\d+\.\d+\.(\d+)', r'\1', version)) nextversion = re.sub(r'^(\d+\.\d+\.)\d+', r'\1', version) + str(bugfixversion + 1) - + contents = re.sub(r'((com|org)\.python\.pydev(\.\w+)?;)(bundle-version=")\[\d+\.\d+\.\d+,\d+\.\d+\.\d+\)"', r'\1\4[%s,%s)"' % (version, nextversion), contents) contents = re.sub(r'()', r'\g<1>%s\3' % (version,), contents) return contents @@ -129,7 +130,7 @@ def test_lines2(): org.python.pydev.shared_core;bundle-version="[5.6.0,5.6.1)", org.python.pydev;bundle-version="[5.6.0,5.6.1)", com.python.pydev;bundle-version="[5.6.0,5.6.1)", - + ''', '6.7.1') @@ -140,7 +141,7 @@ def test_lines2(): org.python.pydev.shared_core;bundle-version="[6.7.1,6.7.2)", org.python.pydev;bundle-version="[6.7.1,6.7.2)", com.python.pydev;bundle-version="[6.7.1,6.7.2)", - + ''' check_contents(contents, expected) @@ -161,8 +162,6 @@ def update_version_in_liclipse(version): with open(f, 'w') as stream: stream.write(new_contents) - - if __name__ == '__main__': if len(sys.argv) == 2: if sys.argv[1] == '--test': @@ -172,5 +171,6 @@ def update_version_in_liclipse(version): version = sys.argv[1] update_version(version) update_version_in_liclipse(version) + update_version_in_build_homepage(version) else: print('This script requires the new version (i.e.: 3.6.0)')