From ca7d1cee6295dbc9b31686ae178de22e320f39b2 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 2 Sep 2024 14:09:33 +0300 Subject: [PATCH 01/13] add first drafts for ayonversion control addon and a badge --- ...addon_version_control_admin_get_started.md | 30 +++++++++ .../docs/addon_version_control_admin_intro.md | 62 ++++++++++++++++++ .../addon_version_control_admin_settings.md | 39 +++++++++++ .../docs/assets/json/Ayon_addons_version.json | 1 + .../collect_version_control.png | Bin 0 -> 34682 bytes .../version_control/connection_settings.png | Bin 0 -> 18356 bytes website/sidebars.js | 16 +++++ 7 files changed, 148 insertions(+) create mode 100644 website/docs/addon_version_control_admin_get_started.md create mode 100644 website/docs/addon_version_control_admin_intro.md create mode 100644 website/docs/addon_version_control_admin_settings.md create mode 100644 website/docs/assets/version_control/collect_version_control.png create mode 100644 website/docs/assets/version_control/connection_settings.png diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md new file mode 100644 index 00000000..12c80887 --- /dev/null +++ b/website/docs/addon_version_control_admin_get_started.md @@ -0,0 +1,30 @@ +--- +id: addon_version_control_admin_get_started +title: Version Control Get Started +sidebar_label: Get Started +description: Version Control Get Started. +toc_max_heading_level: 5 +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + + {versions.VersionControl_Badge} + + +## AYON Version Control + +AYON pipeline natively is following the traditional versioning strategy +- increment and save (up version) strategy + +**The current state of the addon** + + + + + +## Different workflows and purposes diff --git a/website/docs/addon_version_control_admin_intro.md b/website/docs/addon_version_control_admin_intro.md new file mode 100644 index 00000000..7a816a3b --- /dev/null +++ b/website/docs/addon_version_control_admin_intro.md @@ -0,0 +1,62 @@ +--- +id: addon_version_control_admin_intro +title: Version Control Intro +sidebar_label: Intro +description: Version Control Intro. +toc_max_heading_level: 5 +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## What is version control ? + +As Git defines it, Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. + +## Nature of Version Control +How using Version Control System is different from traditional up versioning strategy ? +From overview it's similar to hero versioning. +Let's make an easy comparison: + + + + + +- Follows a Folder Structure +- Create new folder with version up and save new files inside it. +- To pick a version, navigate to its folder. +- Can pick different versions at the same time. e.g. pick v005 and v008 and v009 at the same time. +- To check the history, navigate to your folder structure. + + + + + +- A repository +- Push commit to the repository +- To pick a version, you'd need to use a dedicated command. +- Can pick different versions at the same time ? or it's only one at the same time ? +- To check the history, use a dedicated viewer. + + + + + +:::tip +From a pipeline perspective, users shouldn't be concerned about how these things are handled in the backend as this should be totally managed by the pipeline. + +And, it should be up to the pipeline admin to select the version control system that provide easy maintenance and better performance. +::: + + +## Further Reading + +### Perforce vs Git: Comparing the Differences + +https://get.assembla.com/blog/perforce-vs-git/ \ No newline at end of file diff --git a/website/docs/addon_version_control_admin_settings.md b/website/docs/addon_version_control_admin_settings.md new file mode 100644 index 00000000..a7dbe49d --- /dev/null +++ b/website/docs/addon_version_control_admin_settings.md @@ -0,0 +1,39 @@ +--- +id: addon_version_control_admin_settings +title: Version Control Addon Settings +sidebar_label: Settings +description: Version Control Addon Settings. +toc_max_heading_level: 5 +--- + +import ReactMarkdown from "react-markdown"; +import versions from '@site/docs/assets/json/Ayon_addons_version.json' + + + {versions.VersionControl_Badge} + + +## Settings +![](assets/version_control/connection_settings.png) + +- **Backend name:** List of active version control systems. +- **Host name:** Pipeline integration name for the backend name. +- **Port:** port number that perforce server uses. + :::info + By default, The server url for perforce is expected to be `http://localhost:{Port}`. + Keep in mind that the addon sets the URL to `PERFORCE_WEBSERVER_URL` environment variable. + ::: + +## Publish Plugins + +### Collect Version Control + +![](assets/version_control/collect_version_control.png) +Profiles: +- Host names +- Families +- Task Types +- Task names +- Add Version Control to representations +- **Template name:** Name from Anatomy to provide path and name of committed file. + diff --git a/website/docs/assets/json/Ayon_addons_version.json b/website/docs/assets/json/Ayon_addons_version.json index 9055797a..25f5279b 100644 --- a/website/docs/assets/json/Ayon_addons_version.json +++ b/website/docs/assets/json/Ayon_addons_version.json @@ -38,6 +38,7 @@ "USD_Badge" : "[![USD Addon - 0.1.2](https://img.shields.io/badge/USD_Addon-1.0.3-1c91d4)](https://github.com/ynput/ayon-usd)", "Wrap_Badge" : "![wrap - 0.0.1](https://img.shields.io/badge/wrap-0.0.1-2f4249)", "Zbrush_Badge" : "![zbrush - 0.1.0](https://img.shields.io/badge/zbrush-0.1.0-2f4249)", + "VersionControl_Badge" : "[![Version Control - 0.0.2](https://img.shields.io/badge/Version_Control-0.0.2-404040?logo=git)](https://github.com/ynput/ayon-version-control)", "Teamplate_Badge" : "[![Template Badge - #.#.#](https://img.shields.io/badge/Template_Badge-%23.%23.%23-00d6a1)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/example_addons)" } \ No newline at end of file diff --git a/website/docs/assets/version_control/collect_version_control.png b/website/docs/assets/version_control/collect_version_control.png new file mode 100644 index 0000000000000000000000000000000000000000..d07cc58b0eb5c94a8c8fe25afd6e8537695ee19a GIT binary patch literal 34682 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

y8(2zSd6PSkSIK=`Cwn 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 GgeCwwFa}Wo literal 0 HcmV?d00001 diff --git a/website/sidebars.js b/website/sidebars.js index 4f08de22..142ad711 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -176,6 +176,22 @@ module.exports = { "addon_flow_admin", "addon_aquarium_admin", "addon_usd_admin", + { + type: "category", + label: "Version Control", + link: { + type: 'generated-index', + title: 'AYON Version Control', + description: + "Welcome to AYON Version Control Docs!", + keywords: ['version-control'], + }, + items: [ + "addon_version_control_admin_intro", + "addon_version_control_admin_get_started", + "addon_version_control_admin_settings" + ] + }, ].sort(sorted), }, From 6484ae4edab6e44f7517c09093818cb46848eef1 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Sat, 14 Sep 2024 01:24:45 +0300 Subject: [PATCH 02/13] enhance writing --- .../docs/addon_version_control_admin_intro.md | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/website/docs/addon_version_control_admin_intro.md b/website/docs/addon_version_control_admin_intro.md index 7a816a3b..3b7947bb 100644 --- a/website/docs/addon_version_control_admin_intro.md +++ b/website/docs/addon_version_control_admin_intro.md @@ -11,52 +11,66 @@ import TabItem from '@theme/TabItem'; ## What is version control ? -As Git defines it, Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. +Version control, as defined by [Git](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control), is a system that records changes to a file or set of files over time. This allows you to revisit and restore earlier versions if needed. + +Now, you might wonder, doesn't AYON do something similar? We'll dive deeper into this in the following section. ## Nature of Version Control -How using Version Control System is different from traditional up versioning strategy ? -From overview it's similar to hero versioning. -Let's make an easy comparison: +:::tip +Version control, conceptually, is similar to hero versioning where you have a master version that points to one preferred version among other saved versions. +::: + +AYON at its core adopts the traditional up-versioning strategy, which stands apart from using a Version Control System. But what sets them apart? Let's compare the two to highlight key differences: - + -- Follows a Folder Structure -- Create new folder with version up and save new files inside it. -- To pick a version, navigate to its folder. -- Can pick different versions at the same time. e.g. pick v005 and v008 and v009 at the same time. -- To check the history, navigate to your folder structure. +- Uses a folder-based structure. +- Updates are made by creating a new folder labeled with the next version number and saving the updated files there. +- To access a specific version, you simply navigate to the folder labeled with that version number. +- Allows simultaneous access to multiple versions, like loading v005, v008, and v009 simultaneously. +- Reviewing the history requires going through the folder structure. -- A repository -- Push commit to the repository -- To pick a version, you'd need to use a dedicated command. -- Can pick different versions at the same time ? or it's only one at the same time ? -- To check the history, use a dedicated viewer. - +- Uses a repository, Think of a repository as a database that keeps track of all version histories. +- Updates are made by committing changes, which are essentially snapshots of your files at a specific point in time. +- Accessing a specific version involves using commands to revert your files to that particular snapshot. +- Although it requires extra effort, it's possible to access multiple versions at once, like loading v005, v008, and v009 simultaneously. +- Reviewing the history requires using a dedicated tool designed for tracking and visualizing version histories. + :::tip -From a pipeline perspective, users shouldn't be concerned about how these things are handled in the backend as this should be totally managed by the pipeline. +From a pipeline perspective, users can remain focused on their tasks without worrying about the inner workings of various systems in the backend, as these are fully managed by the pipeline. -And, it should be up to the pipeline admin to select the version control system that provide easy maintenance and better performance. +Additionally, it is up to the pipeline admin to choose the most suitable version control system. ::: +## Version Control & Creative Industries + +Version control is widely recognized in the gaming industry and virtual production, more so than in other creative sectors such as VFX, animation and advertising. +This is reflected in the extensive discussions on forums and official sites for Unreal Engine or Unity. -## Further Reading +For instance, Epic Games offers an insightful article [Versioning and Source Control](https://dev.epicgames.com/community/learning/tutorials/jO2m/unreal-engine-versioning-and-source-control), which delves into: +- Comprehensive tutorials on version control basics. +- Workflow practices for version control in virtual production. +- Building an Asset Library in Perforce, catering to various projects, sequences, seasons, episodes, and more. -### Perforce vs Git: Comparing the Differences +## Learn More -https://get.assembla.com/blog/perforce-vs-git/ \ No newline at end of file +- [What is Git?](https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F) +- [Perforce Helix Core vs Git](https://get.assembla.com/blog/perforce-vs-git/) +- [Perforce Helix Core Beginner’s Guide](https://www.youtube.com/playlist?list=PLH3pq2J85xsPYn71_yzzsZQKvalTW-duE) +- [Perforce Helix Core Admin’s Guide](https://www.youtube.com/playlist?list=PLH3pq2J85xsMDY2AAkzUhTmHIg1S7WN1f) From 6326e57fe90da293891bdaf045a630b5b80d455a Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Sat, 14 Sep 2024 01:25:12 +0300 Subject: [PATCH 03/13] enhance writing --- website/docs/addon_version_control_admin_settings.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/website/docs/addon_version_control_admin_settings.md b/website/docs/addon_version_control_admin_settings.md index a7dbe49d..f93b4275 100644 --- a/website/docs/addon_version_control_admin_settings.md +++ b/website/docs/addon_version_control_admin_settings.md @@ -1,7 +1,7 @@ --- id: addon_version_control_admin_settings title: Version Control Addon Settings -sidebar_label: Settings +sidebar_label: Version Control Settings description: Version Control Addon Settings. toc_max_heading_level: 5 --- @@ -13,7 +13,7 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' {versions.VersionControl_Badge} -## Settings +## Addon Settings ![](assets/version_control/connection_settings.png) - **Backend name:** List of active version control systems. @@ -29,7 +29,8 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' ### Collect Version Control ![](assets/version_control/collect_version_control.png) -Profiles: + +**Profiles:** - Host names - Families - Task Types From 2080092ca847c56943da5741466c6e4e5f81cf05 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Sat, 14 Sep 2024 01:26:04 +0300 Subject: [PATCH 04/13] populate `Get Started` page --- ...addon_version_control_admin_get_started.md | 79 ++++++++++++++++--- 1 file changed, 70 insertions(+), 9 deletions(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 12c80887..14723db9 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -13,18 +13,79 @@ import versions from '@site/docs/assets/json/Ayon_addons_version.json' {versions.VersionControl_Badge} -## AYON Version Control +## Current state of the addon -AYON pipeline natively is following the traditional versioning strategy -- increment and save (up version) strategy +This addon tries to implement generic API for various version control system. -**The current state of the addon** +Currently contains WIP implementation of Perforce, but there might be more in the future which should follow +same API methods. - +Implementation tries to use only single dependency `p4python` which is binary dependent on version of python used. +Which might be different in different DCCs, different versions of Unreal etc. +To mitigate need of having binary compatible `p4python` libraries addon currently implements REST api to run p4 commands +only on separate webserver started by AYON Tray which contains `p4python` library installed via dependency package and +REST stub class which might be used in each DCC that has `requests` library. +:::info +The AYON Version Control addon doesn't replace the built-in versioning functionality. +Instead, it adds an extra layer by publishing the product to two separate locations: the AYON publish directory and the Perforce server. +::: -## Different workflows and purposes +## Configuration of connection to Perforce server + +Addons offers configuration of credentials to P4 server with username and password on multiple levels via +Studio(single credentials), Project (credentials different per project) or Site settings(credentials different per artist.) + +## Perforce workspace + +It is expected that P4 workspaces would be setup and existing on artists machines. Each artist then only +provides path to their locally accessible P4 workspace folder in Site Settings. + +## Main functionalities for Perforce + +This addons contains two main functionality for slightly different use cases: +- create separate version controlled streams from AYON of published products in Perforce +- help with Deadline rendering of Unreal projects with Perforce + +It is expected that majority work for Perforce with Unreal project files are done with official Perforce +tools like `P4V` or command line utility. Neither of those are distributed by addon and it is required +for IT department to install/configure them. + + +### Commits to Perforce + +This approach allows to copy version control not only in AYON, where each publish results in new version +of published product, but committing this version directly to Perforce. + +That way versions of particular product are separately kept in Perforce, from which ordinary Perforce tools +could be used (P4V) to pull latest version of published product. + +Profiles could be used to limit which published products should be committed to Perforce. + +As Perforce controlled product doesn't contain version name directly in its name nor path, additional +AYON template must be configured in Project's Anatomy > Templates. + +New template must follow [Hero template](artist_concepts.md#hero-version) approach, +`Hero` template could be used directly too (if it is matching required folder structure in Perforce) + +### Support for Unreal and Deadline + +The other workflow is to help rendering Unreal from Perforce on Deadline rendering farm. + +In this use case there is an exception that multiple artists are working on Unreal project with standard utilization of +P4 or Unreal P4 official plugin to checkout/commit any modifications to Unreal project to Perforce. + +Addons offers additional possibility to mark current stage of Unreal project, eg. latest commit/changelist, as 'published' and +store its metadata in AYON for possible future workflows and enhancements. + +New additional mini tool is provided for artists before they open Unreal via AYON launcher which allows them to +`P4 sync` (not `checkout` - that would lock the files) to any previously published version before Unreal is actually opened. + +This marker, or tag, points to commit/changelist and could be pushed to Deadline integration where Deadline +syncs to this particular commit before rendering. + +This requires to have AYON integration to Deadline installed. Please check https://ayon.ynput.io/docs/addon_deadline_admin for more details. + +Usage of Perforce in Deadline submissions could be controlled by toggling on/off of automatically created instance of +`changelist_metadata` product type in AYON Publisher. From 3a2777db85f45154e2cf09ef3a60f3e668b618ea Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 16 Sep 2024 15:16:41 +0300 Subject: [PATCH 05/13] tweak some words --- website/docs/addon_version_control_admin_get_started.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 14723db9..5c6acee4 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -39,16 +39,16 @@ Studio(single credentials), Project (credentials different per project) or Site ## Perforce workspace -It is expected that P4 workspaces would be setup and existing on artists machines. Each artist then only +It is expected that P4 workspaces would be setup and existed on artists machines. Each artist then only provides path to their locally accessible P4 workspace folder in Site Settings. ## Main functionalities for Perforce -This addons contains two main functionality for slightly different use cases: +This addons contains two main functionalities for slightly different use cases: - create separate version controlled streams from AYON of published products in Perforce - help with Deadline rendering of Unreal projects with Perforce -It is expected that majority work for Perforce with Unreal project files are done with official Perforce +It is expected that majority working for Perforce with Unreal project files are done with official Perforce tools like `P4V` or command line utility. Neither of those are distributed by addon and it is required for IT department to install/configure them. @@ -58,7 +58,7 @@ for IT department to install/configure them. This approach allows to copy version control not only in AYON, where each publish results in new version of published product, but committing this version directly to Perforce. -That way versions of particular product are separately kept in Perforce, from which ordinary Perforce tools +The products with versions are separately kept in Perforce, from which ordinary Perforce tools could be used (P4V) to pull latest version of published product. Profiles could be used to limit which published products should be committed to Perforce. From a5b1b980c3f30ecdb2c385a94d4e12daadee57d9 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Mon, 16 Sep 2024 15:22:10 +0300 Subject: [PATCH 06/13] enhance wording --- website/docs/addon_version_control_admin_get_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 5c6acee4..7027b394 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -20,7 +20,7 @@ This addon tries to implement generic API for various version control system. Currently contains WIP implementation of Perforce, but there might be more in the future which should follow same API methods. -Implementation tries to use only single dependency `p4python` which is binary dependent on version of python used. +The implementation aims to rely solely on a single dependency, `p4python`, which is binary-dependent on the Python version in use. Which might be different in different DCCs, different versions of Unreal etc. To mitigate need of having binary compatible `p4python` libraries addon currently implements REST api to run p4 commands From 2ef98ef41f15c0e0e909d9b364dff5efa32d403e Mon Sep 17 00:00:00 2001 From: Mustafa Jafar Date: Wed, 18 Sep 2024 13:59:41 +0300 Subject: [PATCH 07/13] remove extra space Co-authored-by: Kayla Man <64118225+moonyuet@users.noreply.github.com> --- website/docs/addon_version_control_admin_get_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 7027b394..4dcf2694 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -44,7 +44,7 @@ provides path to their locally accessible P4 workspace folder in Site Settings. ## Main functionalities for Perforce -This addons contains two main functionalities for slightly different use cases: +This addons contains two main functionalities for slightly different use cases: - create separate version controlled streams from AYON of published products in Perforce - help with Deadline rendering of Unreal projects with Perforce From bae213f6f7c2d61e2548db6dab26d2088afcddbc Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 20 Sep 2024 13:31:28 +0200 Subject: [PATCH 08/13] Fix formatting Co-authored-by: Kayla Man <64118225+moonyuet@users.noreply.github.com> --- website/docs/addon_version_control_admin_get_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 4dcf2694..899d0c74 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -21,7 +21,7 @@ Currently contains WIP implementation of Perforce, but there might be more in th same API methods. The implementation aims to rely solely on a single dependency, `p4python`, which is binary-dependent on the Python version in use. -Which might be different in different DCCs, different versions of Unreal etc. +This means it might be different in different DCCs, different versions of Unreal etc. To mitigate need of having binary compatible `p4python` libraries addon currently implements REST api to run p4 commands only on separate webserver started by AYON Tray which contains `p4python` library installed via dependency package and From 72e0ffbe3b364c3068a0b74493d520e8050aab65 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 20 Sep 2024 13:31:40 +0200 Subject: [PATCH 09/13] Tweak grammar Co-authored-by: Kayla Man <64118225+moonyuet@users.noreply.github.com> --- website/docs/addon_version_control_admin_get_started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/addon_version_control_admin_get_started.md b/website/docs/addon_version_control_admin_get_started.md index 899d0c74..2bab526a 100644 --- a/website/docs/addon_version_control_admin_get_started.md +++ b/website/docs/addon_version_control_admin_get_started.md @@ -63,7 +63,7 @@ could be used (P4V) to pull latest version of published product. Profiles could be used to limit which published products should be committed to Perforce. -As Perforce controlled product doesn't contain version name directly in its name nor path, additional +As Perforce controls the product which doesn't contain version name directly in its name nor path, additional AYON template must be configured in Project's Anatomy > Templates. New template must follow [Hero template](artist_concepts.md#hero-version) approach, From e6e11570cb5dfe0a5f916fd7bcc2c8c09e82f029 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 26 Sep 2024 11:14:09 +0300 Subject: [PATCH 10/13] update versioncontrol badge --- website/docs/assets/json/Ayon_addons_version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/assets/json/Ayon_addons_version.json b/website/docs/assets/json/Ayon_addons_version.json index d9128ce8..ca27ca4d 100644 --- a/website/docs/assets/json/Ayon_addons_version.json +++ b/website/docs/assets/json/Ayon_addons_version.json @@ -38,7 +38,7 @@ "USD_Badge" : "[![USD Addon - 0.1.2](https://img.shields.io/badge/USD_Addon-1.0.3-1c91d4)](https://github.com/ynput/ayon-usd)", "Wrap_Badge" : "![wrap - 0.0.1](https://img.shields.io/badge/wrap-0.0.1-2f4249)", "Zbrush_Badge" : "![zbrush - 0.1.0](https://img.shields.io/badge/zbrush-0.1.0-2f4249)", - "VersionControl_Badge" : "[![Version Control - 0.0.2](https://img.shields.io/badge/Version_Control-0.0.2-404040?logo=git)](https://github.com/ynput/ayon-version-control)", + "VersionControl_Badge" : "[![Version Control - 0.0.2](https://img.shields.io/badge/Version_Control-0.0.2-404040?logo=perforce)](https://github.com/ynput/ayon-version-control)", "Teamplate_Badge" : "[![Template Badge - #.#.#](https://img.shields.io/badge/Template_Badge-%23.%23.%23-00d6a1)](https://github.com/ynput/OpenPype/tree/develop/openpype/modules/example_addons)" } \ No newline at end of file From f821981fa7dd2784f28b46eff1d21f209ee7b60d Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 26 Sep 2024 11:15:31 +0300 Subject: [PATCH 11/13] add versioncontrol feature card --- website/src/data/addons/addons.ts | 1 + .../data/addons/data/img/perforce-icon.png | Bin 0 -> 22938 bytes .../src/data/addons/data/versioncontrol.ts | 21 ++++++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 website/src/data/addons/data/img/perforce-icon.png create mode 100644 website/src/data/addons/data/versioncontrol.ts diff --git a/website/src/data/addons/addons.ts b/website/src/data/addons/addons.ts index dd4343b5..8a526a01 100644 --- a/website/src/data/addons/addons.ts +++ b/website/src/data/addons/addons.ts @@ -48,6 +48,7 @@ export const officialAddons = [ "slack", "tvpaint", "unreal", + "versioncontrol", "wrap", "openrv", "openusd", diff --git a/website/src/data/addons/data/img/perforce-icon.png b/website/src/data/addons/data/img/perforce-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cf40dcee53d7deabbb2aa4e168f73d7ffe7fd12b GIT binary patch literal 22938 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 literal 0 HcmV?d00001 diff --git a/website/src/data/addons/data/versioncontrol.ts b/website/src/data/addons/data/versioncontrol.ts new file mode 100644 index 00000000..53eb96c9 --- /dev/null +++ b/website/src/data/addons/data/versioncontrol.ts @@ -0,0 +1,21 @@ +import { type Addon } from "../types"; +import versions from "@site/docs/assets/json/Ayon_addons_version.json"; + +const addon: Addon = { + title: "Version Control", + description: + "The AYON Version Control addon implements a generic API that can be used with various version control systems, with a primary focus on Perforce.", + icon: "perforce-icon.png", + badge: versions.VersionControl_Badge, + features: [ + ], + products: [ + + ], + docs: { + admin: "category/version-control", + }, + github: "https://github.com/ynput/ayon-version-control", +}; + +export default addon; From 049b65d2a900cb984c3e99646bb0ec4b6d159813 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 26 Sep 2024 17:16:29 +0300 Subject: [PATCH 12/13] add first drafts for version control addon user docs --- website/docs/addon_version_control_artist.md | 78 ++++++++++++++++++ .../perforce_changes_viewer.png | Bin 0 -> 6939 bytes .../site_settings_user_credentials.png | Bin 0 -> 30290 bytes website/sidebars.js | 1 + .../src/data/addons/data/versioncontrol.ts | 2 +- 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 website/docs/addon_version_control_artist.md create mode 100644 website/docs/assets/version_control/perforce_changes_viewer.png create mode 100644 website/docs/assets/version_control/site_settings_user_credentials.png diff --git a/website/docs/addon_version_control_artist.md b/website/docs/addon_version_control_artist.md new file mode 100644 index 00000000..856eb4a1 --- /dev/null +++ b/website/docs/addon_version_control_artist.md @@ -0,0 +1,78 @@ +--- +id: addon_version_control_artist +title: Version Control Artist Docs +sidebar_label: Version Control +description: Version Control Addon's documentations for artists. +toc_max_heading_level: 5 +--- + +:::tip +Currently, the addon implements basic Perforce support inside of Unreal. +::: + +## Get Started + +### User Setup + +:::info Perforce Workspace +It is expected that P4 workspaces would be setup and existed on artists machines. +::: + +![](assets/version_control/site_settings_user_credentials.png) + +Perforce site settings user name, password and workspace directory. + +### Launch Unreal with version control enabled + +When starting Unreal via AYON Launcher, a pop window will show up before Unreal launch allows you to sync to specific a change list. +![](assets/version_control/perforce_changes_viewer.png) + +## How Perforce support works + +:::tip +We assume that you always on the latest change list. +::: + +## Workflows + +Perforce doesn't replace regular AYON publishing. +Because commit changes to perforce and publish to AYON are two separate actions. +And, you can do both for the same asset! + +So for example, you can use AYON to publish assets and use perforce to setup and version control your scene. + + +### Commit Strategy + +| Unreal | Visible in AYON | +|--|--| +| commit | | +| commit | | +| Publish to AYON | ✅ | +| commit | | +| Publish to AYON | ✅ | + +### `Publish to AYON` Process + +When having any workfile changes while workfile instance is enabled, AYON will commit them automatically before publishing. + +Publish `change list` info as Json file. +Publish your files to AYON. +if you are publishing the same asset that you are pushing to perforce, then AYON publish will be more like taking a snapshot of that asset at a particular `change list` and save it like any other published assets. which makes it available for other DCCs as well. + + +### Deadline + +:::info +Current Deadline implementation requires P4 depots to be of type 'stream' and workspace to be assigned to a stream. +::: + +When having any workfile changes while workfile instance is enabled, AYON will commit them automatically before sending the deadline job. + + +## FAQ + +### Do the addon support submitting a deadline job with a specific change list number? + + +### What happens when I submit a render, pause it, do some commits in perforce and requeue the render job? diff --git a/website/docs/assets/version_control/perforce_changes_viewer.png b/website/docs/assets/version_control/perforce_changes_viewer.png new file mode 100644 index 0000000000000000000000000000000000000000..389650fddd6ff14c60a00af7995524106dc05c52 GIT binary patch literal 6939 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�p~8btyWRD~TaF(WKU4oXP-D~(I!ZnrGHko*~D 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 literal 0 HcmV?d00001 diff --git a/website/sidebars.js b/website/sidebars.js index d4d56241..26aaa5d5 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -93,6 +93,7 @@ module.exports = { "addon_substancepainter_artist", "addon_tvpaint_artist", "addon_unreal_artist", + "addon_version_control_artist", "addon_wrap_artist", "addon_openrv_artist", { diff --git a/website/src/data/addons/data/versioncontrol.ts b/website/src/data/addons/data/versioncontrol.ts index 53eb96c9..ad39c2c9 100644 --- a/website/src/data/addons/data/versioncontrol.ts +++ b/website/src/data/addons/data/versioncontrol.ts @@ -10,9 +10,9 @@ const addon: Addon = { features: [ ], products: [ - ], docs: { + user: "addon_version_control_artist", admin: "category/version-control", }, github: "https://github.com/ynput/ayon-version-control", From b7c95c956cba3981d52831f8c19085605958bef8 Mon Sep 17 00:00:00 2001 From: MustafaJafar Date: Thu, 26 Sep 2024 22:56:57 +0300 Subject: [PATCH 13/13] Mark FAQ section as TODO --- website/docs/addon_version_control_artist.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/addon_version_control_artist.md b/website/docs/addon_version_control_artist.md index 856eb4a1..9f5adaa6 100644 --- a/website/docs/addon_version_control_artist.md +++ b/website/docs/addon_version_control_artist.md @@ -69,10 +69,10 @@ Current Deadline implementation requires P4 depots to be of type 'stream' and wo When having any workfile changes while workfile instance is enabled, AYON will commit them automatically before sending the deadline job. - +