diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..31b2b89 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Soar Shuffler", + "type": "debugpy", + "request": "launch", + "program": "SoarShuffler/soar_shuffler.py", + "console": "integratedTerminal", + "args": "SoarShuffler/Soar_Projects_Filelist.txt" + } + ] +} diff --git a/ManualSource/manual.tex b/ManualSource/manual.tex index 387fda7..37e6cc8 100644 --- a/ManualSource/manual.tex +++ b/ManualSource/manual.tex @@ -189,7 +189,7 @@ % soar version information \newcommand{\SoarVersionMajor}{9} \newcommand{\SoarVersionMinor}{6} -\newcommand{\SoarVersionRevision}{1} +\newcommand{\SoarVersionRevision}{3} % to add functions to .glo file: diff --git a/ManualSource/svs.tex b/ManualSource/svs.tex index f6fdc87..6a1b7f0 100644 --- a/ManualSource/svs.tex +++ b/ManualSource/svs.tex @@ -83,7 +83,7 @@ \section{The scene graph} Each state in working memory has its own scene graph. When a new state is created, it will receive an independent copy of its parent's scene graph. -This is useful for performing look-ahead search, as it allows the agent to destructively modify the scene graph in a search state using mental imagery operations. +This is useful for performing look-ahead search, as it allows the agent to destructively modify the scene graph in a search state using mental imagery operations. If you wish to turn off the scene graph copying behavior, you can disable it with \soar{svs --disable-in-substates}. You can also re-enable it with \soar{svs --enable-in-substates}. % ---------------------------------------------------------------------------- diff --git a/SoarShuffler/.gitignore b/SoarShuffler/.gitignore index ebc6b5e..22b58e9 100644 --- a/SoarShuffler/.gitignore +++ b/SoarShuffler/.gitignore @@ -1,2 +1,2 @@ jars/*.jar -SoarRelease.zip +*Release* diff --git a/SoarShuffler/README.txt b/SoarShuffler/README.txt index 5b3212e..1a20fd1 100644 --- a/SoarShuffler/README.txt +++ b/SoarShuffler/README.txt @@ -72,13 +72,13 @@ This file specifies how projects are zipped up and files are moved around. Curr - The first line of each project contains only the project name and delimits one project from another. Any line that does NOT contain an equal sign "=" is considered a new project name. - Other lines can either specify a parameter describing that project or how to move or organize files within the project - - Parameters: There are two parameters you can set for a project: type and out - - Type + - Parameters: There are three parameters you can set for a project: type, out and copyContents + - type - 'zip': zip up the files described in the project - 'copy' : copy files from one directory to another as descirbed in the project - - 'multiplatform-zip': zip up the files described in the project but copy different version of platform-specific items like libraries and launch scripts. Project descriptions of this type contain variables telling it which files need special version and where it can find them. + - 'multiplatform-zip/copy': same as zip/copy, but copy different version of platform-specific items like libraries and launch scripts. Project descriptions of this type contain variables telling it which files need special versions and where it can find them. - For example, "type=multiplatform-zip" will create five zips for a particular project description - - Out + - out - This parameter specified where in the output direct it places the final zip or copied files. - For example, "out=SoarSuite\" will move the final results into Output Directory\SoarSuite - File organization desciptors: @@ -104,3 +104,9 @@ Known Issues ============ - When launching, the script will empty out the output directory. Sometimes it doesn't wait long enough for the the output directory to be deleted. If you get an error related to that, just run it again. - There is code to only re-zip files whose contents have changed. It doesn't seem to always work properly, but the whole script works fast enough that fixing it is not a high priority. + +============ +Wish List +============ + +* Differentiate directories and files in the project description file. This would allow us to specify whether we want the directory contents or the directory itself, and would avoid headaches caused by accidentally nesting output directories. diff --git a/SoarShuffler/Soar_Projects_Filelist.txt b/SoarShuffler/Soar_Projects_Filelist.txt index 032777a..a4d9892 100755 --- a/SoarShuffler/Soar_Projects_Filelist.txt +++ b/SoarShuffler/Soar_Projects_Filelist.txt @@ -1,3 +1,122 @@ +SoarSuite_$VERSION + type=multiplatform-zip + + $COMPILE_DIR/libSoar.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/Soar.lib=bin/$PLATFORM_DIR^ + $COMPILE_DIR/UnitTests.$EXECUTABLE=bin/$PLATFORM_DIR + $COMPILE_DIR/soar.$EXECUTABLE=bin/$PLATFORM_DIR + + $COMPILE_DIR/libJava_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + + $COMPILE_DIR/Python_sml_ClientInterface.py=bin/$PLATFORM_DIR + $COMPILE_DIR/_Python_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + + $COMPILE_DIR/libTcl_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/Tcl_sml_ClientInterface.exp=bin/$PLATFORM_DIR^ + $COMPILE_DIR/Tcl_sml_ClientInterface.lib=bin/$PLATFORM_DIR^ + $COMPILE_DIR/libtclsoarlib.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/pkgIndex.tcl=bin/$PLATFORM_DIR + + $COMPILE_DIR/libCSharp_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/sml_csharp.dll=bin/$PLATFORM_DIR + + $COMPILE_DIR/include=include + + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Building_Soar.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/README.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Release_Notes_$VERSION.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/license.txt=$ROOT + + $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=documentation/SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=documentation/SoarTutorial + +# can't compile at the moment +# $COMPILE_DIR/svs_viewer.$EXECUTABLE=bin/$PLATFORM_DIR + + $COMPILE_DIR/SoarJavaDebugger.jar=bin + $COMPILE_DIR/SoarUnitTests=bin/SoarUnitTests + $COMPILE_DIR/tcl=bin/tcl + $COMPILE_DIR/settings.soar=bin + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/Eaters_TankSoar.jar=bin + $SOAR_GROUP_REPOS_HOME/VisualSoar/VisualSoar.jar=bin + + $COMPILE_DIR/java/swt.jar=bin/$PLATFORM_DIR + $COMPILE_DIR/java/jcommon-1.0.10.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6-swt.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6.jar=bin/java + $COMPILE_DIR/java/sml.jar=bin/java + $COMPILE_DIR/java/soar-debugger-api.jar=bin/java + $COMPILE_DIR/java/soar-debugger.jar=bin/java + $COMPILE_DIR/java/soar-smljava.jar=bin/java + $COMPILE_DIR/java/swtgraphics2d.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/commons-logging-1.1.1.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/log4j-1.2.15.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/stopwatch-0.4-with-deps.jar=bin/java + + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarCLI.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/setup.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarJavaDebugger.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/VisualSoar.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/Eaters.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/TankSoar.$LAUNCH_EXTENSION=$ROOT + + $SOAR_GROUP_REPOS_HOME/Agents/default=Agents/default + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Agents_readme.md=Agents/readme.md + $SOAR_GROUP_REPOS_HOME/Agents/arithmetic=Agents/arithmetic + $SOAR_GROUP_REPOS_HOME/Agents/BW-RL=Agents/BW-RL + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical-LA=Agents/BW-Hierarchical-LA + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical=Agents/BW-Hierarchical + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA-state-eval=Agents/BW-LA-state-eval + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA=Agents/BW-LA + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal-RL=Agents/BW-Op-Subgoal-RL + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal=Agents/BW-Op-Subgoal + $SOAR_GROUP_REPOS_HOME/Agents/BW-Simple=Agents/BW-Simple + $SOAR_GROUP_REPOS_HOME/Agents/BW-SoarManual=Agents/BW-SoarManual + $SOAR_GROUP_REPOS_HOME/Agents/eight-puzzle=Agents/eight-puzzle + $SOAR_GROUP_REPOS_HOME/Agents/epmem-tutorial=Agents/epmem-tutorial + $SOAR_GROUP_REPOS_HOME/Agents/fifteen-puzzle=Agents/fifteen-puzzle + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-operator=Agents/hello-world-operator + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-rule=Agents/hello-world-rule + $SOAR_GROUP_REPOS_HOME/Agents/left-right=Agents/left-right + $SOAR_GROUP_REPOS_HOME/Agents/mac-planning=Agents/mac-planning + $SOAR_GROUP_REPOS_HOME/Agents/mac=Agents/mac + $SOAR_GROUP_REPOS_HOME/Agents/smem-tutorial=Agents/smem-tutorial + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-recursive=Agents/towers-of-hanoi-recursive + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-simple=Agents/towers-of-hanoi-simple + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-hierarchy=Agents/water-jug-hierarchy + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-look-ahead=Agents/water-jug-look-ahead + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-rl=Agents/water-jug-rl + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-simple=Agents/water-jug-simple + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-tie=Agents/water-jug-tie + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/eaters=Agents/eaters + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/tanksoar=Agents/tanksoar + + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/eaters.cnf=bin/games + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/tanksoar.cnf=bin/games + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/eaters=bin/games/maps/eaters + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/tanksoar=bin/games/maps/tanksoar + +Documentation + type=copy + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=Documentation + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=Documentation + Algebra_Agent type=zip out=Agents/ @@ -130,21 +249,6 @@ Water_Jug_Tie_Agent type=zip out=Agents/ $SOAR_GROUP_REPOS_HOME/Agents/water-jug-tie=$ROOT -SoarManual - type=copy - out=Documentation/ - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT -SoarTutorial - type=copy - out=Documentation/ - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=SoarTutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=SoarTutorial Episodic_Memory_Sizer type=zip out=AgentDevelopmentTools/ @@ -261,127 +365,3 @@ PDDL type=zip out=Domains/ $SOAR_GROUP_REPOS_HOME/Domains-Planning-Domain-Definition-Language=PDDL/ -SoarSuite_$VERSION - type=multiplatform-zip - out=SoarSuite/ - $COMPILE_DIR/libSoar.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libJava_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/Python_sml_ClientInterface.py=bin/$PLATFORM_DIR - $COMPILE_DIR/_Python_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libTcl_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libtclsoarlib.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/pkgIndex.tcl=bin/$PLATFORM_DIR - $COMPILE_DIR/java/swt.jar=bin/$PLATFORM_DIR - $COMPILE_DIR/soar.$EXECUTABLE=bin/$PLATFORM_DIR - $COMPILE_DIR/UnitTests.$EXECUTABLE=bin/$PLATFORM_DIR -# can't compile at the moment -# $COMPILE_DIR/svs_viewer.$EXECUTABLE=bin/$PLATFORM_DIR - $COMPILE_DIR/SoarJavaDebugger.jar=bin - $COMPILE_DIR/java/jcommon-1.0.10.jar=bin/java - $COMPILE_DIR/java/jfreechart-1.0.6-swt.jar=bin/java - $COMPILE_DIR/java/jfreechart-1.0.6.jar=bin/java - $COMPILE_DIR/java/sml.jar=bin/java - $COMPILE_DIR/java/soar-debugger-api.jar=bin/java - $COMPILE_DIR/java/soar-debugger.jar=bin/java - $COMPILE_DIR/java/soar-smljava.jar=bin/java - $COMPILE_DIR/java/swtgraphics2d.jar=bin/java - $COMPILE_DIR/SoarUnitTests=bin/SoarUnitTests - $COMPILE_DIR/include=include - $COMPILE_DIR/tcl=bin/tcl - $COMPILE_DIR/settings.soar=bin - $SOAR_GROUP_REPOS_HOME/VisualSoar/VisualSoar.jar=bin - $SOAR_GROUP_REPOS_HOME/Agents/default=Agents/default - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarCLI.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/setup.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarJavaDebugger.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/VisualSoar.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Release_Notes_$VERSION.txt=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/README=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/license.txt=$ROOT - $COMPILE_DIR/libCSharp_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/sml_csharp.dll=bin/$PLATFORM_DIR - $COMPILE_DIR/Soar.lib=bin/$PLATFORM_DIR^ - $COMPILE_DIR/Tcl_sml_ClientInterface.exp=bin/$PLATFORM_DIR^ - $COMPILE_DIR/Tcl_sml_ClientInterface.lib=bin/$PLATFORM_DIR^ - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT -SoarTutorial_$VERSION - type=multiplatform-zip - out=SoarSuite/ - $COMPILE_DIR/libSoar.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libJava_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libTcl_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/libtclsoarlib.$DLL_EXTENSION=bin/$PLATFORM_DIR - $COMPILE_DIR/pkgIndex.tcl=bin/$PLATFORM_DIR - $COMPILE_DIR/java/swt.jar=bin/$PLATFORM_DIR - $COMPILE_DIR/soar.$EXECUTABLE=bin/$PLATFORM_DIR - $COMPILE_DIR/SoarJavaDebugger.jar=bin - $COMPILE_DIR/java/jcommon-1.0.10.jar=bin/java - $COMPILE_DIR/java/jfreechart-1.0.6-swt.jar=bin/java - $COMPILE_DIR/java/jfreechart-1.0.6.jar=bin/java - $COMPILE_DIR/java/sml.jar=bin/java - $COMPILE_DIR/java/soar-debugger-api.jar=bin/java - $COMPILE_DIR/java/soar-debugger.jar=bin/java - $COMPILE_DIR/java/soar-smljava.jar=bin/java - $COMPILE_DIR/java/swtgraphics2d.jar=bin/java - $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/Eaters_TankSoar.jar=bin - $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/commons-logging-1.1.1.jar=bin/java - $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/log4j-1.2.15.jar=bin/java - $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/stopwatch-0.4-with-deps.jar=bin/java - $SOAR_GROUP_REPOS_HOME/VisualSoar/VisualSoar.jar=bin - $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=$ROOT - $COMPILE_DIR/settings.soar=bin - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarCLI.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarJavaDebugger.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/VisualSoar.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/Eaters.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/setup.$LAUNCH_EXTENSION=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/TankSoar.$LAUNCH_EXTENSION=$ROOT - $COMPILE_DIR/tcl=bin/tcl - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/README=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/license.txt=$ROOT - $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Agents_readme.md=Agents/ - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=Tutorial - $SOAR_GROUP_REPOS_HOME/Agents/arithmetic=Agents/arithmetic - $SOAR_GROUP_REPOS_HOME/Agents/BW-RL=Agents/BW-RL - $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical-LA=Agents/BW-Hierarchical-LA - $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical=Agents/BW-Hierarchical - $SOAR_GROUP_REPOS_HOME/Agents/BW-LA-state-eval=Agents/BW-LA-state-eval - $SOAR_GROUP_REPOS_HOME/Agents/BW-LA=Agents/BW-LA - $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal-RL=Agents/BW-Op-Subgoal-RL - $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal=Agents/BW-Op-Subgoal - $SOAR_GROUP_REPOS_HOME/Agents/BW-Simple=Agents/BW-Simple - $SOAR_GROUP_REPOS_HOME/Agents/BW-SoarManual=Agents/BW-SoarManual - $SOAR_GROUP_REPOS_HOME/Agents/default=Agents/default - $SOAR_GROUP_REPOS_HOME/Agents/eight-puzzle=Agents/eight-puzzle - $SOAR_GROUP_REPOS_HOME/Agents/epmem-tutorial=Agents/epmem-tutorial - $SOAR_GROUP_REPOS_HOME/Agents/fifteen-puzzle=Agents/fifteen-puzzle - $SOAR_GROUP_REPOS_HOME/Agents/hello-world-operator=Agents/hello-world-operator - $SOAR_GROUP_REPOS_HOME/Agents/hello-world-rule=Agents/hello-world-rule - $SOAR_GROUP_REPOS_HOME/Agents/left-right=Agents/left-right - $SOAR_GROUP_REPOS_HOME/Agents/mac-planning=Agents/mac-planning - $SOAR_GROUP_REPOS_HOME/Agents/mac=Agents/mac - $SOAR_GROUP_REPOS_HOME/Agents/smem-tutorial=Agents/smem-tutorial - $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-recursive=Agents/towers-of-hanoi-recursive - $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-simple=Agents/towers-of-hanoi-simple - $SOAR_GROUP_REPOS_HOME/Agents/water-jug-hierarchy=Agents/water-jug-hierarchy - $SOAR_GROUP_REPOS_HOME/Agents/water-jug-look-ahead=Agents/water-jug-look-ahead - $SOAR_GROUP_REPOS_HOME/Agents/water-jug-rl=Agents/water-jug-rl - $SOAR_GROUP_REPOS_HOME/Agents/water-jug-simple=Agents/water-jug-simple - $SOAR_GROUP_REPOS_HOME/Agents/water-jug-tie=Agents/water-jug-tie - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/eaters=Agents/Eaters - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/tanksoar=Agents/TankSoar - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/eaters.cnf=bin/games - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/tanksoar.cnf=bin/games - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/eaters=bin/games/maps/eaters - $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/tanksoar=bin/games/maps/tanksoar - $COMPILE_DIR/Soar.lib=bin/$PLATFORM_DIR^ - $COMPILE_DIR/Tcl_sml_ClientInterface.exp=bin/$PLATFORM_DIR^ - $COMPILE_DIR/Tcl_sml_ClientInterface.lib=bin/$PLATFORM_DIR^ - $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT diff --git a/SoarShuffler/old-Soar_Projects_Filelist.txt b/SoarShuffler/old-Soar_Projects_Filelist.txt new file mode 100755 index 0000000..d5adf35 --- /dev/null +++ b/SoarShuffler/old-Soar_Projects_Filelist.txt @@ -0,0 +1,396 @@ +# The previous way we packaged a release (keeping in case we decide not to reformat the release) +# Many files are copied multiple times, particularly because SoarSuite and SoarTutorial have so much +# overlap. +Algebra_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/algebra=$ROOT +Arithmetic_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/arithmetic=$ROOT +Arithmetic-SMem_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/arithmetic-smem=$ROOT +BlocksWorld_Hierarchical_Lookahead_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical-LA=$ROOT +BlocksWorld_Hierarchical_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical=$ROOT +BlocksWorld_Lookahead_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA=$ROOT +BlocksWorld_Hierarchical_State_Evaluation_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA-state-eval=$ROOT +BlocksWorld_Subgoaling_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal=$ROOT +BlocksWorld_Subgoaling_RL_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal-RL=$ROOT +BlocksWorld_RL_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-RL=$ROOT +BlocksWorld_Simple_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/BW-simple=$ROOT +Episodic_Memory_Counting_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/count-epmem=$ROOT +Counting_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/count-test-files=$ROOT +Eight_Puzzle_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/eight-puzzle=$ROOT +Episodic_Memory_Tutorial_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/epmem-tutorial=$ROOT +Fifteen_Puzzle_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/fifteen-puzzle=$ROOT +Graph_Search_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/graph-search=$ROOT +Graph_Search_SMem_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/graph-search-smem=$ROOT +Hello_World_Operator_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-operator=$ROOT +Hello_World_Rule_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-rule=$ROOT +KB_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/kb=$ROOT +Left_Right_RL_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/left-right=$ROOT +Missionaries_And_Cannibals_Simple_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/mac=$ROOT +Missionaries_And_Cannibals_Planning_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/mac-planning=$ROOT +Reinforcement_Learning_Unit_Test_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/rl-unit=$ROOT +Semantic_Memory_Tutorial_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/smem-tutorial=$ROOT +Tower_Of_Hanoi_Recursive_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-recursive=$ROOT +Tower_Of_Hanoi_Simple_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-simple=$ROOT +Water_Jug_Hierarchical_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-hierarchy=$ROOT +Water_Jug_Look_Ahead_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-look-ahead=$ROOT +Water_Jug_Reinforcement_Learning_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-rl=$ROOT +Water_Jug_Simple_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-simple=$ROOT +Water_Jug_Tie_Agent + type=zip + out=Agents/ + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-tie=$ROOT +SoarManual + type=copy + out=Documentation/ + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT +VisualSoarManual + type=copy + out=Documentation/ + $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=$ROOT +SoarTutorial + type=copy + out=Documentation/ + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=SoarTutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=SoarTutorial +Episodic_Memory_Sizer + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/Other-Agent-Development-Tools/epmem-size=$ROOT +QuickLink + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/Other-Agent-Development-Tools/QuickLink=$ROOT +State2Dot + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/Other-Agent-Development-Tools/State2Dot=$ROOT +UltraEdit_Soar_Formatting_Wordfile + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/Other-Agent-Development-Tools/UltraEdit_Wordfile=$ROOT +VisualSoar_Source + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/VisualSoar=$ROOT +Vim_Soar_Formatting_Plugin + type=zip + out=AgentDevelopmentTools/ + $SOAR_GROUP_REPOS_HOME/Other-Agent-Development-Tools/vimplugin=$ROOT +SoarQnA + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-SoarQnA=$ROOT +SoarTextIO + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-SoarTextIO=$ROOT +WordNet + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-WordNet=$ROOT +WordNet_With_Parse_Trees + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-WordNet-with-Parse-Trees=$ROOT +CSharp_Interface_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/CSharp=$ROOT +Python_Interface_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/Soar_Exp=$ROOT +Soar_Scratch_Pad_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/SoarScratchPad=$ROOT +Tower_Of_Hanoi_SML_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/TOHSML=$ROOT +Soar_Filter_C_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/FilterC=$ROOT +Soar_Filter_Tcl_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/FilterTcl=$ROOT +Java_Missionaries_and_Cannibals_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/JavaMissionaries=$ROOT +Java_Tower_of_Hanoi_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/JavaTOH=$ROOT +LoggerJava_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/LoggerJava=$ROOT +LoggerWinC_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/LoggerWinC=$ROOT +RL_Command_Line_Interface_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/RlCli=$ROOT +Soar_Obfuscator + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/SoarObfuscator=$ROOT +Working_Memory_Activation_Tracker_Example + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Examples-and-Unsupported/WMActivationTracker=$ROOT +RoomsWorld_$VERSION + type=zip + out=Examples-and-Unsupported/ + $SOAR_GROUP_REPOS_HOME/Domains-RoomsWorld=RoomsWorld +InfiniteMario-$VERSION + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-InfiniteMario=InfiniteMario/ +DiceQnA + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-DiceQnA=DiceQnA/ +Dice + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-Dice=Dice/ +GGP + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-General-Game-Playing=GGP/ +PDDL + type=zip + out=Domains/ + $SOAR_GROUP_REPOS_HOME/Domains-Planning-Domain-Definition-Language=PDDL/ +SoarSuite_$VERSION + type=multiplatform-zip + out=SoarSuite/ + $COMPILE_DIR/libSoar.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libJava_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/Python_sml_ClientInterface.py=bin/$PLATFORM_DIR + $COMPILE_DIR/_Python_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libTcl_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libtclsoarlib.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/pkgIndex.tcl=bin/$PLATFORM_DIR + $COMPILE_DIR/java/swt.jar=bin/$PLATFORM_DIR + $COMPILE_DIR/soar.$EXECUTABLE=bin/$PLATFORM_DIR + $COMPILE_DIR/UnitTests.$EXECUTABLE=bin/$PLATFORM_DIR +# can't compile at the moment +# $COMPILE_DIR/svs_viewer.$EXECUTABLE=bin/$PLATFORM_DIR + $COMPILE_DIR/SoarJavaDebugger.jar=bin + $COMPILE_DIR/java/jcommon-1.0.10.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6-swt.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6.jar=bin/java + $COMPILE_DIR/java/sml.jar=bin/java + $COMPILE_DIR/java/soar-debugger-api.jar=bin/java + $COMPILE_DIR/java/soar-debugger.jar=bin/java + $COMPILE_DIR/java/soar-smljava.jar=bin/java + $COMPILE_DIR/java/swtgraphics2d.jar=bin/java + $COMPILE_DIR/SoarUnitTests=bin/SoarUnitTests + $COMPILE_DIR/include=include + $COMPILE_DIR/tcl=bin/tcl + $COMPILE_DIR/settings.soar=bin + $SOAR_GROUP_REPOS_HOME/VisualSoar/VisualSoar.jar=bin + $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=$ROOT + $SOAR_GROUP_REPOS_HOME/Agents/default=Agents/default + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarCLI.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/setup.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarJavaDebugger.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/VisualSoar.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Building_Soar.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/README.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Release_Notes_$VERSION.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/license.txt=$ROOT + $COMPILE_DIR/libCSharp_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/sml_csharp.dll=bin/$PLATFORM_DIR + $COMPILE_DIR/Soar.lib=bin/$PLATFORM_DIR^ + $COMPILE_DIR/Tcl_sml_ClientInterface.exp=bin/$PLATFORM_DIR^ + $COMPILE_DIR/Tcl_sml_ClientInterface.lib=bin/$PLATFORM_DIR^ + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT +SoarTutorial_$VERSION + type=multiplatform-zip + out=SoarSuite/ + $COMPILE_DIR/libSoar.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libJava_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libTcl_sml_ClientInterface.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/libtclsoarlib.$DLL_EXTENSION=bin/$PLATFORM_DIR + $COMPILE_DIR/pkgIndex.tcl=bin/$PLATFORM_DIR + $COMPILE_DIR/java/swt.jar=bin/$PLATFORM_DIR + $COMPILE_DIR/soar.$EXECUTABLE=bin/$PLATFORM_DIR + $COMPILE_DIR/SoarJavaDebugger.jar=bin + $COMPILE_DIR/java/jcommon-1.0.10.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6-swt.jar=bin/java + $COMPILE_DIR/java/jfreechart-1.0.6.jar=bin/java + $COMPILE_DIR/java/sml.jar=bin/java + $COMPILE_DIR/java/soar-debugger-api.jar=bin/java + $COMPILE_DIR/java/soar-debugger.jar=bin/java + $COMPILE_DIR/java/soar-smljava.jar=bin/java + $COMPILE_DIR/java/swtgraphics2d.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/Eaters_TankSoar.jar=bin + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/commons-logging-1.1.1.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/log4j-1.2.15.jar=bin/java + $SOAR_GROUP_REPOS_HOME/Release-Support/SoarShuffler/jars/stopwatch-0.4-with-deps.jar=bin/java + $SOAR_GROUP_REPOS_HOME/VisualSoar/VisualSoar.jar=bin + $SOAR_GROUP_REPOS_HOME/VisualSoar/doc/usersman/VisualSoar_UsersManual.pdf=$ROOT + $COMPILE_DIR/settings.soar=bin + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarCLI.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/SoarJavaDebugger.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/VisualSoar.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/Eaters.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/setup.$LAUNCH_EXTENSION=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/scripts/TankSoar.$LAUNCH_EXTENSION=$ROOT + $COMPILE_DIR/tcl=bin/tcl + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/README.md=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/license.txt=$ROOT + $SOAR_GROUP_REPOS_HOME/Release-Support/txt/Agents_readme.md=Agents/ + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 1 - Simple Agents.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 2 - Interacting with an Environment.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 3 - Subgoals.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 4 - Simple Problem-Solving.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 5 - Planning and Learning.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 6 - Reinforcement Learning.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 7 - SMem.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/Soar Tutorial Part 8 - EpMem.pdf=Tutorial + $SOAR_GROUP_REPOS_HOME/Agents/arithmetic=Agents/arithmetic + $SOAR_GROUP_REPOS_HOME/Agents/BW-RL=Agents/BW-RL + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical-LA=Agents/BW-Hierarchical-LA + $SOAR_GROUP_REPOS_HOME/Agents/BW-Hierarchical=Agents/BW-Hierarchical + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA-state-eval=Agents/BW-LA-state-eval + $SOAR_GROUP_REPOS_HOME/Agents/BW-LA=Agents/BW-LA + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal-RL=Agents/BW-Op-Subgoal-RL + $SOAR_GROUP_REPOS_HOME/Agents/BW-Op-Subgoal=Agents/BW-Op-Subgoal + $SOAR_GROUP_REPOS_HOME/Agents/BW-Simple=Agents/BW-Simple + $SOAR_GROUP_REPOS_HOME/Agents/BW-SoarManual=Agents/BW-SoarManual + $SOAR_GROUP_REPOS_HOME/Agents/default=Agents/default + $SOAR_GROUP_REPOS_HOME/Agents/eight-puzzle=Agents/eight-puzzle + $SOAR_GROUP_REPOS_HOME/Agents/epmem-tutorial=Agents/epmem-tutorial + $SOAR_GROUP_REPOS_HOME/Agents/fifteen-puzzle=Agents/fifteen-puzzle + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-operator=Agents/hello-world-operator + $SOAR_GROUP_REPOS_HOME/Agents/hello-world-rule=Agents/hello-world-rule + $SOAR_GROUP_REPOS_HOME/Agents/left-right=Agents/left-right + $SOAR_GROUP_REPOS_HOME/Agents/mac-planning=Agents/mac-planning + $SOAR_GROUP_REPOS_HOME/Agents/mac=Agents/mac + $SOAR_GROUP_REPOS_HOME/Agents/smem-tutorial=Agents/smem-tutorial + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-recursive=Agents/towers-of-hanoi-recursive + $SOAR_GROUP_REPOS_HOME/Agents/towers-of-hanoi-simple=Agents/towers-of-hanoi-simple + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-hierarchy=Agents/water-jug-hierarchy + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-look-ahead=Agents/water-jug-look-ahead + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-rl=Agents/water-jug-rl + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-simple=Agents/water-jug-simple + $SOAR_GROUP_REPOS_HOME/Agents/water-jug-tie=Agents/water-jug-tie + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/eaters=Agents/Eaters + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/agents/tanksoar=Agents/TankSoar + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/eaters.cnf=bin/games + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/tanksoar.cnf=bin/games + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/eaters=bin/games/maps/eaters + $SOAR_GROUP_REPOS_HOME/Domains-Eaters-TankSoar/config/maps/tanksoar=bin/games/maps/tanksoar + $COMPILE_DIR/Soar.lib=bin/$PLATFORM_DIR^ + $COMPILE_DIR/Tcl_sml_ClientInterface.exp=bin/$PLATFORM_DIR^ + $COMPILE_DIR/Tcl_sml_ClientInterface.lib=bin/$PLATFORM_DIR^ + $SOAR_GROUP_REPOS_HOME/Release-Support/pdf/SoarManual.pdf=$ROOT diff --git a/SoarShuffler/soar_shuffler.py b/SoarShuffler/soar_shuffler.py index 98dc918..b8a0b6c 100755 --- a/SoarShuffler/soar_shuffler.py +++ b/SoarShuffler/soar_shuffler.py @@ -11,6 +11,7 @@ from itertools import chain import os from pathlib import Path +import re import shutil import sys from typing import Dict, List @@ -19,6 +20,16 @@ VERSION = os.environ.get("SOAR_RELEASE_VERSION") ROOT_VAR = "$ROOT" +COMPILE_DIR_VAR = "$COMPILE_DIR" +LAUNCH_EXTENSION_VAR = ".$LAUNCH_EXTENSION" +EXECUTABLE_VAR = ".$EXECUTABLE" +DLL_EXTENSION_VAR = ".$DLL_EXTENSION" +PLATFORM_DIR_VAR = "$PLATFORM_DIR" + +PLATFORM_SPECIFIC_VARS = [COMPILE_DIR_VAR, LAUNCH_EXTENSION_VAR, EXECUTABLE_VAR, DLL_EXTENSION_VAR, PLATFORM_DIR_VAR] + +# any of above strings appearing in a string would indicate that it's platform-specific +PLATFORM_SPECIFIC_RE = re.compile("|".join(map(lambda v: re.escape(v), PLATFORM_SPECIFIC_VARS))) # Path to directory containing clones of all the SoarGroup repositories SOAR_GROUP_REPOS_HOME = os.environ["SOAR_GROUP_REPOS_HOME"] @@ -82,8 +93,6 @@ def __load_release_spec(spec_path): return projects def ignore_list(src, names): - import pdb - pdb.set_trace() return [n for n in names if n.startswith(".svn") or n.startswith(".git")] def copy_project(projectName, projects: Dict[str, ProjectEntry]): @@ -100,12 +109,16 @@ def copy_project(projectName, projects: Dict[str, ProjectEntry]): else: destination = destination_path / b print(f" - Checking if destination {destination} exists") - if (not destination.exists()): + if (not destination.exists() and not source.is_dir()): print (f"Creating directory {destination}") destination.mkdir(parents=True) if (source.is_dir()): + # destination = destination / os.path.basename(source) + if destination.exists(): + print (f" - Skipping directory copy: {source} --> {destination} (already exists)") + continue print (f" - Performing dir copy: {source} --> {destination}") - shutil.copytree(source, destination / os.path.basename(source), ignore=ignore_list) + shutil.copytree(source, destination, ignore=ignore_list) else: print (f" - Performing file copy: {source} --> {destination}") shutil.copy2(source, destination) @@ -114,14 +127,16 @@ def zip_project(projectName, projects: Dict[str, ProjectEntry]): print(f"Zipping up project {projectName}") seen_list = list() - destination_zip = OUTPUT_DIR / projects[projectName].out / (projectName+".zip") + project = projects[projectName] + + destination_zip = OUTPUT_DIR / project.out / (projectName+".zip") destination_dir = destination_zip.parent if (not destination_dir.exists()): print (" - Creating directory"), destination_dir destination_dir.mkdir(parents=True) with zipfile.ZipFile(destination_zip, 'w', compression=zipfile.ZIP_DEFLATED) as dest_zip: - for a,b in projects[projectName].copyList: + for a,b in project.copyList: source = Path(a) platform_suffix = "" for platform_id in PLATFORM_IDs: @@ -129,10 +144,11 @@ def zip_project(projectName, projects: Dict[str, ProjectEntry]): b = b.replace(f"$SPECIALIZE-{platform_id}", "") platform_suffix = "-" + platform_id if b == ROOT_VAR: - destination = os.path.join(projectName) + destination = Path(projectName) else: - destination = os.path.join(projectName,b) + destination = Path(projectName, b) if (source.is_dir()): + # destination = destination / os.path.basename(source) for root, dirs, files in os.walk(source): if (".svn" in root or ".git" in root): print (f" - Ignoring version control directory {root}") @@ -177,68 +193,75 @@ def zip_project(projectName, projects: Dict[str, ProjectEntry]): zinfo.internal_attr = 0 zinfo.create_system = 3 -def multiplatformize_project(projectName, projects: Dict[str, ProjectEntry]): +def _specialize_for_windows(a: str, b:str): + a = a.replace(LAUNCH_EXTENSION_VAR, ".bat") + a = a.replace(EXECUTABLE_VAR, ".exe") + a = a.replace(COMPILE_DIR_VAR, COMPILED_DIRS[WINDOWS_PLATFORM_ID]) + b = b.replace("^", "") + b = b.replace(PLATFORM_DIR_VAR, WINDOWS_PLATFORM_ID) + if (DLL_EXTENSION_VAR in a): + if ("_Python_sml_ClientInterface" in a): + a = a.replace(DLL_EXTENSION_VAR, ".pyd") + else: + a = a.replace(DLL_EXTENSION_VAR, ".dll") + d,f = os.path.split(a) + if f.startswith('lib'): + a = os.path.join(d,f[3:]) + return a, b + +def multiplatformize_project(projectName:str, project: ProjectEntry): + # remove leading "multiplatform-" + project_type = project.type[project.type.find("-")+1:] + print (f"Creating multi-platform project {projectName}") - new_entry = ProjectEntry(type='zip', out=projects[projectName].out) + new_entry = ProjectEntry(type=project_type, out=project.out) print (" - Specializing files for Windows...") - for a,b in projects[projectName].copyList: - a = a.replace(".$LAUNCH_EXTENSION", ".bat") - a = a.replace(".$EXECUTABLE", ".exe") - a = a.replace("$COMPILE_DIR", COMPILED_DIRS[WINDOWS_PLATFORM_ID]) - b = b.replace("^", "") - b = b.replace("$PLATFORM_DIR", WINDOWS_PLATFORM_ID) - if (".$DLL_EXTENSION" in a): - if ("_Python_sml_ClientInterface" in a): - a = a.replace(".$DLL_EXTENSION", ".pyd") - else: - a = a.replace(".$DLL_EXTENSION", ".dll") - d,f = os.path.split(a) - if f.startswith('lib'): - a = os.path.join(d,f[3:]) + for a,b in project.copyList: + a, b = _specialize_for_windows(a, b) new_entry.copyList.append((a,b)) print (f" - Adding zip operation: {a} --> {b}") print (" - Specializing files for Linux...") - for a,b in projects[projectName].copyList: + for a,b in project.copyList: if (b.find("^") == -1): - a = a.replace(".$DLL_EXTENSION", ".so") - a = a.replace(".$EXECUTABLE", "") - a = a.replace(".$LAUNCH_EXTENSION", ".sh") - a = a.replace("$COMPILE_DIR", COMPILED_DIRS[LINUX_PLATFORM_ID]) - b = b.replace("$PLATFORM_DIR", LINUX_PLATFORM_ID) + a = a.replace(DLL_EXTENSION_VAR, ".so") + a = a.replace(EXECUTABLE_VAR, "") + a = a.replace(LAUNCH_EXTENSION_VAR, ".sh") + a = a.replace(COMPILE_DIR_VAR, COMPILED_DIRS[LINUX_PLATFORM_ID]) + b = b.replace(PLATFORM_DIR_VAR, LINUX_PLATFORM_ID) new_entry.copyList.append((a,b)) print(f" - Adding zip operation: {a} --> {b}") print (" - Specializing files for macOS x86-64...") - for a,b in projects[projectName].copyList: + for a,b in project.copyList: if (b.find("^") == -1): - a = a.replace("$COMPILE_DIR", COMPILED_DIRS[MAC_x86_64_PLATFORM_ID]) - a = a.replace(".$LAUNCH_EXTENSION", ".sh") - a = a.replace(".$EXECUTABLE", "") + a = a.replace(COMPILE_DIR_VAR, COMPILED_DIRS[MAC_x86_64_PLATFORM_ID]) + a = a.replace(LAUNCH_EXTENSION_VAR, ".sh") + a = a.replace(EXECUTABLE_VAR, "") if ("libJava_sml_ClientInterface" in a): - a = a.replace(".$DLL_EXTENSION", ".jnilib") + a = a.replace(DLL_EXTENSION_VAR, ".jnilib") elif ("_Python_sml_ClientInterface" in a): - a = a.replace(".$DLL_EXTENSION", ".so") + a = a.replace(DLL_EXTENSION_VAR, ".so") else: - a = a.replace(".$DLL_EXTENSION", ".dylib") - b = b.replace("$PLATFORM_DIR", MAC_x86_64_PLATFORM_ID) + a = a.replace(DLL_EXTENSION_VAR, ".dylib") + b = b.replace(PLATFORM_DIR_VAR, MAC_x86_64_PLATFORM_ID) new_entry.copyList.append((a,b)) print(f" - Adding zip operation: {a} --> {b}") print (" - Specializing files for macOS ARM64...") - for a,b in projects[projectName].copyList: + for a,b in project.copyList: if (b.find("^") == -1): - a = a.replace("$COMPILE_DIR", COMPILED_DIRS[MAC_ARM64_PLATFORM_ID]) - a = a.replace(".$LAUNCH_EXTENSION", ".sh") - a = a.replace(".$EXECUTABLE", "") + a = a.replace(COMPILE_DIR_VAR, COMPILED_DIRS[MAC_ARM64_PLATFORM_ID]) + a = a.replace(LAUNCH_EXTENSION_VAR, ".sh") + a = a.replace(EXECUTABLE_VAR, "") if ("libJava_sml_ClientInterface" in a): - a = a.replace(".$DLL_EXTENSION", ".jnilib") + a = a.replace(DLL_EXTENSION_VAR, ".jnilib") elif ("_Python_sml_ClientInterface" in a): - a = a.replace(".$DLL_EXTENSION", ".so") + a = a.replace(DLL_EXTENSION_VAR, ".so") else: - a = a.replace(".$DLL_EXTENSION", ".dylib") - b = b.replace("$PLATFORM_DIR", MAC_ARM64_PLATFORM_ID) + a = a.replace(DLL_EXTENSION_VAR, ".dylib") + b = b.replace(PLATFORM_DIR_VAR, MAC_ARM64_PLATFORM_ID) new_entry.copyList.append((a,b)) print(f" - Adding zip operation: {a} --> {b}") @@ -251,9 +274,10 @@ def print_attr(fileName): def __generate_multiplatform_projects(projects: Dict[str, ProjectEntry]): new_projects: Dict[str, ProjectEntry] = {} - for name in projects: - if projects[name].type == "multiplatform-zip": - new_projects[name + "-Multiplatform"] = multiplatformize_project(name, projects) + for name, project in projects.items(): + project_type = projects[name].type + if project_type.startswith("multiplatform-"): + new_projects[name + "-Multiplatform"] = multiplatformize_project(name, project) return new_projects @@ -261,8 +285,7 @@ def __generate_multiplatform_projects(projects: Dict[str, ProjectEntry]): def shuffle(spec_path): for path in chain(COMPILED_DIRS.values(), [SOAR_GROUP_REPOS_HOME]): if not Path(path).exists(): - print(f"Error: {path} does not exist") - sys.exit(1) + raise ValueError(f"Error: {path} does not exist") clean_output_dir() all_projects = __load_release_spec(spec_path) diff --git a/readme.md b/readme.md index 2e7dcbe..c10941b 100644 --- a/readme.md +++ b/readme.md @@ -2,52 +2,16 @@ ## Current Release Process -* Changes to `SoarTutorial/*.docx` need to be manually exported from Word to `pdf/`. -* Update version numbers in Soar everywhere (see `example_version_bump.patch`). TODO: write some awk to do this automatically. -* Update version numbers in `txt/README`. -* Add a new release notes file under the `txt/` directory -* Clone all of SoarGroup's repos into a directory -* generate the manual via the makefile under `ManualSource`, or grab the built one from this repository's GH action workflow result. It should be placed in the `pdf/` directory. -* Download the Windows, Mac (x86-64) and Linux builds of Soar from the desired GH action workflow result -* Build the mac_ARM64 version locally (hope you have an M1 or M2 computer :) GH doesn't offer CI for it yet) -* Fix the classpath in the manifest (https://github.com/SoarGroup/VisualSoar/issues/1) and build VisualSoar -* Convert VisualSoar's manual to pdf: - - `brew install basictex` - - open new shell - - `sudo tlmgr install soul` - - `cd VisualSoar/doc/usersman` - - `pandoc -o VisualSoar_UsersManual.pdf VisualSoar_UsersManual.docx` -* Gather the following jar's under SoarShuffler/jars: - - Eaters_TankSoar.jar - - commons-logging-1.1.1.jar - - log4j-1.2.15.jar - - stopwatch-0.4-with-deps.jar - -VisualSoar and Eaters_TankSoar must be built from their repositories (although I had to fix VisualSoar, see https://github.com/SoarGroup/VisualSoar/issues/1), and the others are in the `lib/` directory in the VisualSoar repository. Note that the log4j one is *not* affected by the famous security bug. - * Set your environment variables for SoarShuffler. Here's my .env for an example (you can source this automatically using tools like [dotenv](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/dotenv)): ```bash -export SOAR_RELEASE_VERSION=9.6.2 -export SOAR_SHUFFLER_OUTPUT_DIR=./SoarRelease +export SOAR_RELEASE_VERSION=9.6.3 +export SOAR_SHUFFLER_OUTPUT_DIR=./Soar-Release-$SOAR_RELEASE_VERSION export SOAR_WIN_X86_64_COMPILED_DIR=~/Downloads/Soar_windows-x86-64_out export SOAR_LINUX_X86_64_COMPILED_DIR=~/Downloads/Soar_linux-x86-64_out export SOAR_MAC_X86_64_COMPILED_DIR=~/Downloads/Soar_mac-x86-64_out -echo -e "\e[93mReminder: Check that $SOAR_MAC_X86_64_COMPILED_DIR is checked out at the tag you desire and is freshly recompiled\e[0m" -export SOAR_MAC_ARM64_COMPILED_DIR=~/dev/workspaces/release_soar_workspace/Soar/out +export SOAR_MAC_ARM64_COMPILED_DIR=~/Downloads/Soar_mac-ARM64_out export SOAR_GROUP_REPOS_HOME=~/dev/workspaces/release_soar_workspace ``` -* Run SoarShuffle: - - cd SoarShuffle - python3 soar_shuffler.py Soar_Projects_Filelist.txt - -The script will tell you if it can't find any files that it needs. You'll probably need to run it a couple of times to hunt down all of the files you need. You'll probably want to `rm -rf SoarSuite` between runs, just to make sure you aren't keeping any old files in the release. - -You'll get the release directories wherever you specified in the `SOAR_SHUFFLER_OUTPUT_DIR` env var. - -* Finally, unzip the release directories in `SoarRelease/SoarSuite` and check that VisualSoar, the debugger, TankSoar, and SoarCLI all work with a simple double-click. -* Share the release with others and get feedback. -* Once you're happy with it, delete the directories you unzipped and, then zip up the `SoarRelease/SoarSuite` directory and upload it to the release on GitHub. -* Push a releases/$VERSION tag for Soar, and $VERSION tags for other Release-Support and VisualSoar. +* Run `python3 release.py`, which will walk you through all of the steps to create a release. Most of them are currently manual, unfortunately. diff --git a/release.py b/release.py new file mode 100644 index 0000000..52f28ea --- /dev/null +++ b/release.py @@ -0,0 +1,315 @@ +from dataclasses import dataclass +from pathlib import Path +import sys +from os import environ + +PROJECT_DIR = Path(__file__).parent + +SOAR_RELEASE_VERSION = environ.get("SOAR_RELEASE_VERSION") + +SOAR_SHUFFLER_DIR = PROJECT_DIR / "SoarShuffler" + +SOAR_SHUFFLER_OUTPUT_DIR = SOAR_SHUFFLER_DIR / f"Soar-Release-{SOAR_RELEASE_VERSION}" + +SOAR_GROUP_REPOS_HOME = Path(environ.get("SOAR_GROUP_REPOS_HOME")) + +SOAR_WIN_X86_64_COMPILED_DIR = Path(environ.get("SOAR_WIN_X86_64_COMPILED_DIR")) +SOAR_LINUX_X86_64_COMPILED_DIR = Path(environ.get("SOAR_LINUX_X86_64_COMPILED_DIR")) +SOAR_MAC_X86_64_COMPILED_DIR = Path(environ.get("SOAR_MAC_X86_64_COMPILED_DIR")) +SOAR_MAC_ARM64_COMPILED_DIR = Path(environ.get("SOAR_MAC_ARM64_COMPILED_DIR")) + + +@dataclass +class Step: + value: int = 1 + + def proceed(self, confirm=True, check_function=None, fail_message=None): + self.value += 1 + if confirm: + input("Press [Enter] to continue...") + if check_function: + passed = False + while not passed: + try: + check_function() + passed = True + print("✅ Check passed") + except Exception as e: + print(e) + print("❌ Check failed!") + if fail_message: + print(fail_message) + input("Press [Enter] to re-try check...") + print() + + +def report_vars(step: Step): + print(f"Step {step.value}: Confirm following variables:") + print(f"{SOAR_RELEASE_VERSION=}") + print(f"{SOAR_SHUFFLER_OUTPUT_DIR=}") + print(f"{SOAR_GROUP_REPOS_HOME=}") + print(f"{SOAR_WIN_X86_64_COMPILED_DIR=}") + print(f"{SOAR_LINUX_X86_64_COMPILED_DIR=}") + print(f"{SOAR_MAC_X86_64_COMPILED_DIR=}") + print(f"{SOAR_MAC_ARM64_COMPILED_DIR=}") + step.proceed() + + +def export_tutorial(step: Step): + print( + f"Step {step.value}: Manually export changes to SoarTutorial/*.docx from Word to pdf/" + ) + step.proceed() + + +def bump_version(step: Step): + # TODO: manual source will be unified with website version in the future. + print( + ( + f"Step {step.value}: Update version number in ManualSource/manual.tex (look for 'SoarVersionRevision'). " + "Then push the changes so that the manual is rebuilt. " + ) + ) + step.proceed() + + print( + ( + f"Step {step.value}: Update version numbers in Soar everywhere (see example_version_bump.patch). " + "Then push the changes so that Soar is rebuilt with the correct version info." + ) + ) + step.proceed() + + print(f"Step {step.value}: Update version numbers in txt/README.md.") + step.proceed() + + +def release_notes(step: Step): + release_notes_file = ( + PROJECT_DIR / "txt" / f"Release_Notes_{SOAR_RELEASE_VERSION}.md" + ) + print( + ( + f"Step {step.value}: Create and fill {release_notes_file} using a previous release notes file as a template. " + "Ensure full correctness of file." + ) + ) + step.proceed(check_function=lambda: release_notes_file.resolve(strict=True)) + + print( + ( + f"Step {step.value}: Add some cursory release notes in txt/README.md. " + "Ensure full correctness of file." + ) + ) + step.proceed() + + +def build_instructions(step: Step): + print( + f"Step {step.value}: Ensure build instructions in txt/Building_Soar.md are up-to-date." + ) + step.proceed() + + +def clone_repos(step: Step): + print( + f"Step {step.value}: Clone the necessary SoarGroup repositories to {SOAR_GROUP_REPOS_HOME}" + ) + + def check(): + SOAR_GROUP_REPOS_HOME.resolve(strict=True) + required_repos = [ + "Other-Agent-Development-Tools", + "Domains-SoarQnA", + "Domains-SoarTextIO", + "Domains-WordNet", + "Domains-WordNet-with-Parse-Trees", + "Examples-and-Unsupported", + "Domains-RoomsWorld", + "Domains-InfiniteMario", + "Domains-DiceQnA", + "Domains-Dice", + "Domains-General-Game-Playing", + "Domains-Planning-Domain-Definition-Language", + "Agents", + "Domains-Eaters-TankSoar", + "VisualSoar", + ] + for repo in required_repos: + repo_path = SOAR_GROUP_REPOS_HOME / repo + repo_path.resolve(strict=True) + + step.proceed(check_function=check) + + +def manual_pdf(step: Step): + print( + ( + f"Step {step.value}: Grab the latest SoarManual build from this " + "repository's GH Actions artifacts and place it in pdf/." + ) + ) + step.proceed() + + +def download_builds(step: Step): + print( + ( + f"Step {step.value}: Download the latest Soar builds from the Soar repo's GH Actions artifacts. " + "They should be unzipped and placed in the directories specified above for " + "SOAR_WIN_X86_64_COMPILED_DIR, SOAR_LINUX_X86_64_COMPILED_DIR, " + "SOAR_MAC_X86_64_COMPILED_DIR, and SOAR_MAC_ARM64_COMPILED_DIR." + ) + ) + + def check(): + SOAR_WIN_X86_64_COMPILED_DIR.resolve(strict=True) + SOAR_LINUX_X86_64_COMPILED_DIR.resolve(strict=True) + SOAR_MAC_X86_64_COMPILED_DIR.resolve(strict=True) + SOAR_MAC_ARM64_COMPILED_DIR.resolve(strict=True) + + step.proceed(check_function=check) + + +def build_visual_soar(step: Step): + print(f"Step {step.value}: Build VisualSoar") + step.proceed() + + print( + ( + f"Step {step.value}: Convert VisualSoar's manual to pdf; if on Mac, do this:" + " - `brew install basictex`" + " - open new shell" + " - `sudo tlmgr install soul`" + " - `cd VisualSoar/doc/usersman`" + " - `pandoc -o VisualSoar_UsersManual.pdf VisualSoar_UsersManual.docx`" + ) + ) + + def check(): + ( + SOAR_GROUP_REPOS_HOME + / "VisualSoar" + / "doc" + / "usersman" + / "VisualSoar_UsersManual.pdf" + ).resolve(strict=True) + + step.proceed(check_function=check) + + +def build_eaters_tanksoar(step: Step): + print( + f"Step {step.value}: Build Eaters_TankSoar.jar and place it under SoarShuffler/jars." + ) + step.proceed( + check_function=lambda: ( + SOAR_SHUFFLER_DIR / "jars" / "Eaters_TankSoar.jar" + ).resolve(strict=True) + ) + + +def gather_jars(step: Step): + required_jars = [ + "commons-logging-1.1.1.jar", + "log4j-1.2.15.jar", + "stopwatch-0.4-with-deps.jar", + ] + print( + f"Step {step.value}: Gather the following jar's under SoarShuffler/jars:\n" + + "\n".join(map(lambda j: f" - {j}", required_jars)) + ) + + def check(): + for j in required_jars: + (SOAR_SHUFFLER_DIR / "jars" / j).resolve(strict=True) + + step.proceed(check_function=check) + + +def run_soar_shuffler(step: Step): + print( + ( + f"Step {step.value}: Run SoarShuffler:\n" + " - cd SoarShuffle\n" + " - python3 soar_shuffler.py Soar_Projects_Filelist.txt\n" + "The script will tell you if it can't find any files that it needs. You'll probably need to run it " + "a couple of times to hunt down all of the files you need. You'll probably want to `rm -rf SoarSuite` " + "between runs, just to make sure you aren't keeping any old files in the release." + ) + ) + step.proceed(check_function=lambda: (SOAR_SHUFFLER_OUTPUT_DIR/f"SoarSuite_{SOAR_RELEASE_VERSION}-Multiplatform.zip").resolve(strict=True)) + + +def inspect_release(step: Step): + print( + ( + f"Step {step.value}: Unzip SoarShuffler/Soar-Release-{SOAR_RELEASE_VERSION}/Soar_{SOAR_RELEASE_VERSION}-Multiplatform.zip " + "and ensure everything is in order. Check that VisualSoar, the debugger, TankSoar, and SoarCLI all work with a simple double-click. " + "Test on Mac (Intel and ARM), Windows, and Linux." + ) + ) + step.proceed() + + print( + f"Step {step.value}: Share the release with others and get feedback. Repeat this whole process if necessary." + ) + step.proceed() + + +def upload_to_github(step: Step): + print( + ( + f"Step {step.value}: Create a new release on GitHub: https://github.com/SoarGroup/Soar/releases/new. " + f"Type 'releases/{SOAR_RELEASE_VERSION} into the tag field and select 'Create new tag'." + "Copy the basic change notes from txt/README.md to the description and upload " + f"Soar_{SOAR_RELEASE_VERSION}-Multiplatform.zip and all of the documentation PDFs." + "Leave 'Set as a pre-release' *unchecked*, 'Set as the latest release' *checked* and hit 'Publish release'." + ) + ) + step.proceed() + + +def git_tag(step: Step): + print( + ( + f"Step {step.value}: Push {SOAR_RELEASE_VERSION} tags for Release-Support and VisualSoar." + ) + ) + step.proceed() + + +def update_website(step: Step): + print( + ( + f"Step {step.value}: Update the website with the new release information: https://github.com/SoarGroup/SoarGroup.github.io. " + "This includes adding a release announcement and updating download links for the manual and tutorial." + ) + ) + step.proceed() + + +def main(args): + step_counter = Step() + report_vars(step_counter) + export_tutorial(step_counter) + bump_version(step_counter) + release_notes(step_counter) + clone_repos(step_counter) + manual_pdf(step_counter) + download_builds(step_counter) + build_visual_soar(step_counter) + build_eaters_tanksoar(step_counter) + gather_jars(step_counter) + run_soar_shuffler(step_counter) + inspect_release(step_counter) + upload_to_github(step_counter) + git_tag(step_counter) + update_website(step_counter) + + print("Release complete! 🎊🥳🥂, 😪🛌😴") + + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/txt/Building_Soar.md b/txt/Building_Soar.md new file mode 100644 index 0000000..ec718e3 --- /dev/null +++ b/txt/Building_Soar.md @@ -0,0 +1,10 @@ +============= +Building Soar +============= + +If you would like to build Soar from source, you will first need to download the source code +from [GitHub](https://github.com/SoarGroup/Soar). Then, look at the setup and build steps run +by our CI system in the `.github/workflows/build.yml` file. We build for all major platforms. + +The final Soar distribution that you have downloaded here is built using tools in a separate +repository called [Release-Support](https://github.com/SoarGroup/Release-Support). diff --git a/txt/Building_Soar.txt b/txt/Building_Soar.txt deleted file mode 100644 index 6f0c6ce..0000000 --- a/txt/Building_Soar.txt +++ /dev/null @@ -1,22 +0,0 @@ -============= -Building Soar -============= - -To get the most up-to-date build instructions and tips, please visit the -following pages on the Soar wiki: - -(1) Windows Build Instructions - http://soar.eecs.umich.edu/articles/articles/building-soar-aa/80-building-on-windows - -(2) Linux Build Instructions - http://soar.eecs.umich.edu/articles/articles/building-soar-aa/81-building-on-linux - -(3) Mac OSX Build Instructions - http://soar.eecs.umich.edu/articles/articles/building-soar-aa/84-building-on-mac-os-x - -(4) SCons Script Documentation - http://soar.eecs.umich.edu/articles/articles/building-soar-aa/85-scons-build-script-documentation - -(5) How Library Search Paths Work - http://soar.eecs.umich.edu/articles/articles/building-soar-aa/86-how-library-search-paths-work - diff --git a/txt/README b/txt/README.md similarity index 80% rename from txt/README rename to txt/README.md index c318032..cdfee64 100644 --- a/txt/README +++ b/txt/README.md @@ -1,32 +1,30 @@ ========================= -= Soar 9.6.2 README = -= September 2023 = += Soar 9.6.3 README = += June 2024 = ========================= -Welcome to Soar! Soar 9.6.2 is the current, stable version of Soar. It is a maintenance release, meaning no major features were added, but it does still represent a lot of work in the form of bug fixes, code modernization, and usability improvements. Note that the included Java tools, such as the Soar Java Debugger, now require at least Java 11 to run. +Welcome to Soar! Soar 9.6.3 is the current, stable version of Soar. It is a maintenance release, meaning no major features were added, but it does still represent a lot of work in the form of bug fixes, code modernization, and usability improvements. -* VisualSoar has been updated with support for all Soar commands and subsytems, improved reliability and usability, and lots of bug fixes. +* VisualSoar has improved support for version control and collaboration, including datamap import, opening projects read-only, and reduced commit noise. -* Several Soar commands have been updated to be more consistent and easier to use. +* The debugger has been made more stable for dynamic environments that add and remove many agents. -* Soar now has better code compatibility with JSoar, supported by several new RHS functions and automatic conversion of unregistered RHS functions into exec calls. +* Chunking now creates singletons by default. This should be a better default for most projects, but it can +be disabled with `chunking automatically-create-singletons off`. -* This release includes binaries for M1/M2 Macs for the first time. +* SVS can be disabled/enabled for just substates. -* This release includes C# bindings for all platforms for the first time. +* Linux users: Soar was compiled on the recent Ubuntu 24.04, so you may need to update your system or libstdc++ to run the included binaries (or else build from source yourself). -* GitHub Actions now build and test Soar on all supported platforms, making it easier than ever for you to contribute to Soar. - -The full release notes can be found in its own file. +The full release notes can be found in their own file. ==================== Official Soar Manual ==================== -The 9.6.2 edition of the Soar Manual is included here for your reference. However, the manual is continually updated, and the latest version can be -found at: +The 9.6.3 edition of the Soar Manual is included here for your reference. You can also view it online at: -https://soar.eecs.umich.edu/downloads/SoarManual.pdf +https://soar.eecs.umich.edu/soar_manual/ ========= Launching @@ -35,12 +33,13 @@ Launching - Navigate to the folder you extracted to - Launch Soar - To launch Soar within a graphical user interface + - Install Java 11 or later - Windows users, run SoarJavaDebugger.bat - Linux and Mac users, run SoarJavaDebugger.sh - To launch Soar using a command line interface, - - Windows users, run Soar_CLI.bat - - Linux and Mac users, run Soar_CLI.sh - - You can also navigate to the /bin directory in a terminal and run the Soar executable directly. However, macOS users will need to run macOS_setup.command first (located in the root of the release directory) to avoid security warnings from the OS. This is done for you if you use one of the other launch scripts. + - Windows users, run SoarCLI.bat + - Linux and Mac users, run SoarCLI.sh + - You can also navigate to the /bin directory in a terminal and run the Soar executable directly. However, users should first run setup.sh or setup.bat to avoid permission and path issues. This is done for you if you use one of the other launch scripts. Launch options for the CLI and the java debugger are listed at the bottom of this document. @@ -195,3 +194,15 @@ Announcements and high-level questions and discussions related to Soar can be fo - First join the mailing list at https://groups.google.com/g/soar-cognitive-architecture - Then send your questions to soar-cognitive-architecture@googlegroups.com + +If you discover issues with Soar or would like to request a new feature or documentation, +please do not hesitate to file bugs or feature requests on our issue tracker at github: + + https://github.com/SoarGroup/Soar/issues + +To avoid redundant entries, please search for duplicate issues first. + +Pull requests and patches to improve Soar, its documentation or tools are very welcome. + +If you would like to fund further development of Soar, please reach out to John Laird: +[laird@umich.edu](mailto:laird@umich.edu). diff --git a/txt/Release_Notes_9.6.2.txt b/txt/Release_Notes_9.6.2.txt index b78807a..1708c4e 100644 --- a/txt/Release_Notes_9.6.2.txt +++ b/txt/Release_Notes_9.6.2.txt @@ -32,15 +32,27 @@ New Features will no longer need to pass the class instance separately as (void*)userData, and can instead simply pass in the result of std::bind. +() Improved production validity tests and warnings + - Soar now properly detects ungrounded (LHS not connected to a state) productions, refuses + to source them, and tells the user how to fix them. + - Some warnings related to bad production structure were previously hidden behind tracing + flags for chunking, and are now exposed by default. + - See https://github.com/SoarGroup/Soar/issues/377 + () More output filtering options in the debugger We rename "hide all" to "show only errors and top-level", then add a true "hide all" filter to complement that. We also separate messages from RHS writes, and add additional filter options for error and top-level. This covers all 14 output types, while still providing convenient checkboxes for common settings. -() Better dark mode styling for the debugger - Previous versions of the debugger were very difficult to read on Mac in dark mode due +() Ergonomic improvements to the debugger + - Previous versions of the debugger were very difficult to read on Mac in dark mode due to displaying black text on a dark background. The text now correctly shows as white. + - Scrolling behavior has been improved and stabilized. When the cursor is at the end of + the main window, newly-printed text triggers a scroll. Otherwise, the window stays put + where the user's cursor is. + - Shortcuts for copy/paste have been changed from ctrl to cmd on Mac + - New shortcuts have been added zooming in and out (increasing/decreasing the text size) () Documentation in generated Python SML bindings Doxygen comments from SML are now added as docstrings to the generated Python bindings @@ -65,12 +77,14 @@ Other Changes () Infrastructure improvements - `load library` demo has been folded into automated tests - - CI now runs Python SML tests + - CI now runs Python and Tcl SML tests - Added support files for developing Soar with VSCode - Python version is now pinned in CI. This release, the compiled Python SML bindings - are compatible with Python 3.11.X. The generated Python code is compatible with + are compatible with Python 3.12.X. The generated Python code is compatible with older versions of Python, but the compiled bindings are not, so users with different version needs will need to compile their own bindings. + - Setup logic is now encapsulated in setup.bat and setup.sh, which is easier and less + error-prone for other tools dependent on Soar to re-use. () Cruft and cleanup - stopped exporting a large number of internal SML classes to SWIG clients diff --git a/txt/Release_Notes_9.6.3.md b/txt/Release_Notes_9.6.3.md new file mode 100644 index 0000000..c87d961 --- /dev/null +++ b/txt/Release_Notes_9.6.3.md @@ -0,0 +1,96 @@ +# Soar 9.6.3 Release Notes, 2024 + +This release of Soar includes lots of VisualSoar goodies. + +## Breaking Changes + +* New chunking setting, automatically-create-singletons, on by default + * In our work we've found that we usually want all attributes to be singletons by default unless explicitly specified otherwise. This setting attempts creating singletons for every string attribute. We expect this to be a saner default for all users, and think it unlikely to have a negative effect on existing projects. If you have a project that relies on non-singleton attributes, you can disable this setting by setting `chunking automatically-create-singletons off`. + +* Linux users: Soar was compiled on the recent Ubuntu 24.04, so you may need to update your system or libstdc++ to run the included binaries (or else build from source yourself). + +## New Features + +* Visual-Soar improvements (thanks to amnuxoll) + * A datamap can import the datamap of another project + * Projects can be opened read-only + * Less change noise, i.e. more friendly towards version control + * Automatically opens the last project on startup; new "Open Recent" menu option + * Parser now supports LTI predicates + * Lots more smaller improvements + +* You can pip-install Soar! (thanks to ShadowJonathan) + * `pip install soar-sml[compat]` is a drop-in replacement for manually installing Soar somewhere and adding its path to your PYTHONPATH environment variable. + * Note that this does not come with the debugger or other Java applications. +* New svs commands `--disable-in-substates` and `--enable-in-substates`. By default SVS copies the entire scene graph into each substate. This can be disabled with `--disable-in-substates` to save memory and improve performance. This can be re-enabled with `--enable-in-substates` if you need to access the scene graph in substates. +* Python bindings are now compatible with all Python versions 3.2 and up, rather than only with the minor version that was used to build Soar. This is thanks to the work of ShadowJonathan. + +## New Website + +Thanks to Moritz Schmidt, we have a new website! The URL remains the same: https://soar.eecs.umich.edu. New features include: + +* HTML versions of the manual and the tutorial +* Snappy full-text search based on lunr.js +* Much improved editing/deployment workflow based on GitHub pages. We also get the full power of GitHub actions, and use it to automatically check for dead links, for example. + +Note that some pages and download links still need to be ported. The manual and tutorial still need to be fully inspected for correctness, and the images in particular still need work. + +## Other Changes + +* Bug fixes + * Improved Java Debugger stability when adding/removing multiple agents during an application lifetime + * SVS can no longer be disabled when the current state is a subgoal. Allowing this previously led to undefined behavior. + * Fixed `Agent.GetLastCommandLineResult()` returning true when the last command actually failed + * Lots of Visual-Soar bug fixes (thanks to amnuxoll) around parsing, file saving, data preservation, and more + +* Java debugger can now be built for ARM Linux (though this is not distributed at this time) + +* Infrastructure improvements + * ARM Mac now built in CI + +* Cruft and cleanup + * lots of compiler warning fixes, and compiler strictness increased + +## General Information + +Soar can be downloaded by following the download link on the Soar home +page at: + + https://soar.eecs.umich.edu/ + +Soar releases include source code, demo programs, and a number of +applications that serve as examples of how to interface Soar to an +external environment. There is support for integrating Soar with C++, +Java, Tcl and Python applications. Many tools that aid in development +of Soar programs are also available. The download section of the web site +allows you to browse and download all of the different distributions, +tools and agents. + +### Help and Contact information + +You can find many helpful resources on the Soar home page at: + + https://soar.eecs.umich.edu + +To contact the Soar group, you may join and post to one of our mailing +lists: + +For general Soar-related announcements: + + soar-group@lists.sourceforge.net + +For help: + + soar-help@lists.sourceforge.net + +Also, please do not hesitate to file bugs or feature requests on our issue +tracker at github: + + https://github.com/SoarGroup/Soar/issues + +To avoid redundant entries, please search for duplicate issues first. + +Pull requests and patches to improve Soar, its documentation or tools are very welcome. + +If you would like to fund further development of Soar, please reach out to John Laird: +[laird@umich.edu](mailto:laird@umich.edu).