{"id":2085,"date":"2025-05-08T07:01:41","date_gmt":"2025-05-08T14:01:41","guid":{"rendered":"https:\/\/felix-arntz.me\/?p=2085"},"modified":"2025-05-20T12:54:15","modified_gmt":"2025-05-20T19:54:15","slug":"deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation","status":"publish","type":"post","link":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/","title":{"rendered":"Deploying Your WordPress Plugin&#8217;s &#8220;Tested Up To&#8221; Version Bump in Isolation"},"content":{"rendered":"\n<p>Keeping the &#8220;Tested Up To&#8221; version of your WordPress plugin up-to-date on WordPress.org is crucial for ensuring compatibility and giving your users confidence. However, the process of manually updating this information can be a bit tedious, often involving a new release even if no other code changes are necessary.<\/p>\n\n\n\n<p>While there are existing GitHub Actions that can deploy plugin assets to WordPress.org, such as the excellent <a href=\"https:\/\/www.google.com\/search?q=%5Bhttps:\/\/github.com\/10up\/action-wordpress-plugin-asset-update%5D(https:\/\/github.com\/10up\/action-wordpress-plugin-asset-update)\"><code>10up\/action-wordpress-plugin-asset-update<\/code><\/a>, using them solely for updating the &#8220;Tested Up To&#8221; version without any customization can be less than ideal. You might inadvertently deploy other changes you&#8217;ve made to your <code>readme.txt<\/code> file or other assets, even if those weren&#8217;t intended for immediate release. This could lead to unexpected updates on the plugin directory.<\/p>\n\n\n\n<p>Imagine you implemented a new plugin feature in your GitHub repository which is not released yet, and you&#8217;ve already included documentation about it in the <code>readme.txt<\/code>. You wouldn&#8217;t want that to be deployed by accident when all you want to do is bump the &#8220;Tested Up To&#8221; version.<\/p>\n\n\n\n<p>This post highlights a targeted GitHub workflow for exactly this purpose, which allows you to automate the deployment of bumping your WordPress plugin&#8217;s &#8220;Tested Up To&#8221; version in isolation.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">A More Targeted Approach: Updating Only the &#8220;Tested Up To&#8221; Version<\/h2>\n\n\n\n<p>To address this specific need, we need a more targeted solution \u2013 one that would update <em>only<\/em> the &#8220;Tested Up To&#8221; line in the <code>readme.txt<\/code> file on WordPress.org, directly from GitHub, without the risk of deploying any other unintended changes. This should also happen without needing to push a full new release of the plugin.<\/p>\n\n\n\n<p>We can still use <a href=\"https:\/\/www.google.com\/search?q=%5Bhttps:\/\/github.com\/10up\/action-wordpress-plugin-asset-update%5D(https:\/\/github.com\/10up\/action-wordpress-plugin-asset-update)\"><code>10up\/action-wordpress-plugin-asset-update<\/code><\/a> for that workflow, but with some additional tweaks in place.<\/p>\n\n\n\n<p>The initial implementation of such a workflow was <a href=\"https:\/\/github.com\/WordPress\/performance\/pull\/1969\">developed in a pull request for the Performance Lab project<\/a> &#8211; huge props to <a href=\"https:\/\/profiles.wordpress.org\/shyamgadde\/\">Shyamsundar Gadde<\/a> for leading that effort. However, given that Performance Lab is a monorepo, that workflow included some specific logic that wouldn&#8217;t be necessary for most standalone WordPress plugin repositories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Simplified for Your Plugin: Introducing the <code>bump-tested-up-to-dotorg.yml <\/code>Workflow<\/h2>\n\n\n\n<p>To make this more accessible for everyone, I&#8217;ve simplified the workflow for standard WordPress plugin repositories.<\/p>\n\n\n\n<p>The core of this workflow is that it checks out the exact <code>readme.txt<\/code> file that is currently live on WordPress.org. It then proceeds to update <em>only<\/em> the &#8220;Tested Up To&#8221; entry within that file to reflect the WordPress version specified in your GitHub branch (typically the <code>trunk<\/code> or <code>main<\/code> branch).<\/p>\n\n\n\n<p>The full workflow steps are:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Check out the GitHub repository (as always).<\/li>\n\n\n\n<li>Manually download the latest <code>readme.txt<\/code> file currently used for your WordPress.org plugin repository.<\/li>\n\n\n\n<li>Extract the &#8220;Tested Up To&#8221; version from the GitHub repository&#8217;s <code>readme.txt<\/code>.<\/li>\n\n\n\n<li>Copy the downloaded <code>readme.txt<\/code> to override the GitHub repository&#8217;s <code>readme.txt<\/code> in the local checkout, then update the &#8220;Tested Up To&#8221; value with the version determined in the previous step.<\/li>\n\n\n\n<li>Deploy the modified <code>readme.txt<\/code> (with just the version change) using <a href=\"https:\/\/www.google.com\/search?q=%5Bhttps:\/\/github.com\/10up\/action-wordpress-plugin-asset-update%5D(https:\/\/github.com\/10up\/action-wordpress-plugin-asset-update)\"><code>10up\/action-wordpress-plugin-asset-update<\/code><\/a>, while ensuring no other possibly modified files are being deployed.\n<ul class=\"wp-block-list\">\n<li>Note: No extra check is needed in the workflow for whether the deployment is needed, even if the GitHub repository&#8217;s &#8220;Tested Up To&#8221; version is the same as the one that is already in the WordPress.org repository. That is because the action will automatically skip the deployment if there are no changes.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>Here is the complete workflow file for reference:<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"YAML\" data-shcb-language-slug=\"yaml\"><span><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Bump<\/span> <span class=\"hljs-string\">Tested<\/span> <span class=\"hljs-string\">up<\/span> <span class=\"hljs-string\">to<\/span> <span class=\"hljs-string\">on<\/span> <span class=\"hljs-string\">WordPress.org<\/span>\n\n<span class=\"hljs-attr\">on:<\/span>\n    <span class=\"hljs-attr\">workflow_dispatch:<\/span>\n\n<span class=\"hljs-attr\">jobs:<\/span>\n    <span class=\"hljs-attr\">bump-tested-up-to:<\/span>\n        <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Bump<\/span> <span class=\"hljs-string\">\"Tested up to\"<\/span> <span class=\"hljs-string\">version<\/span>\n        <span class=\"hljs-attr\">runs-on:<\/span> <span class=\"hljs-string\">ubuntu-latest<\/span>\n        <span class=\"hljs-attr\">steps:<\/span>\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Checkout<\/span> <span class=\"hljs-string\">code<\/span>\n              <span class=\"hljs-attr\">uses:<\/span> <span class=\"hljs-string\">actions\/checkout@v4<\/span>\n\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Download<\/span> <span class=\"hljs-string\">WordPress.org<\/span> <span class=\"hljs-string\">readme<\/span>\n              <span class=\"hljs-attr\">env:<\/span>\n                  <span class=\"hljs-attr\">SLUG:<\/span> <span class=\"hljs-string\">${{<\/span> <span class=\"hljs-string\">github.event.repository.name<\/span> <span class=\"hljs-string\">}}<\/span>\n              <span class=\"hljs-attr\">run:<\/span> <span class=\"hljs-string\">|\n                  # Download the current readme.txt from WordPress.org\n                  curl -sSL --retry 3 --retry-delay 5 --retry-all-errors --fail -o \/tmp\/wp-org-readme.txt \"https:\/\/plugins.svn.wordpress.org\/$SLUG\/trunk\/readme.txt\"\n                  if &#91; $? -ne 0 ]; then\n                    echo \"::error::Could not fetch readme.txt from WordPress.org for $SLUG\"\n                    exit 1\n                  fi\n<\/span>\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Extract<\/span> <span class=\"hljs-string\">local<\/span> <span class=\"hljs-string\">\"Tested up to\"<\/span> <span class=\"hljs-string\">version<\/span>\n              <span class=\"hljs-attr\">id:<\/span> <span class=\"hljs-string\">extract-tested-up-to<\/span>\n              <span class=\"hljs-attr\">run:<\/span> <span class=\"hljs-string\">|\n                  LOCAL_TESTED_UP_TO=$(grep -E \"^Tested up to:\" \".\/readme.txt\" | awk -F ': +' '{print $2}')\n                  if &#91; -z \"$LOCAL_TESTED_UP_TO\" ]; then\n                    echo \"::error::Unable to parse local Tested up to version from readme.txt\"\n                    exit 1\n                  fi\n<\/span>\n                  <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">\"version=$LOCAL_TESTED_UP_TO\"<\/span> <span class=\"hljs-string\">&gt;&gt;<\/span> <span class=\"hljs-string\">$GITHUB_OUTPUT<\/span>\n\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Prepare<\/span> <span class=\"hljs-string\">and<\/span> <span class=\"hljs-string\">update<\/span> <span class=\"hljs-string\">readme.txt<\/span>\n              <span class=\"hljs-attr\">env:<\/span>\n                  <span class=\"hljs-attr\">LOCAL_TESTED_UP_TO:<\/span> <span class=\"hljs-string\">${{<\/span> <span class=\"hljs-string\">steps.extract-tested-up-to.outputs.version<\/span> <span class=\"hljs-string\">}}<\/span>\n              <span class=\"hljs-attr\">run:<\/span> <span class=\"hljs-string\">|\n                  # Replace local readme.txt with WordPress.org version, updating only the \"Tested up to\" line.\n                  cp \/tmp\/wp-org-readme.txt \".\/readme.txt\"\n                  sed -i -E 's\/^(Tested up to:&#91;&#91;:space:]]*).+\/\\1'\"$LOCAL_TESTED_UP_TO\"'\/' \".\/readme.txt\"\n<\/span>\n                  <span class=\"hljs-comment\"># Show the diff of what's being updated.<\/span>\n                  <span class=\"hljs-comment\"># If there is no change, the following deployment step will simply bail, so we don't need to worry about it.<\/span>\n                  <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">\"Changes made to readme.txt:\"<\/span>\n                  <span class=\"hljs-string\">diff<\/span> <span class=\"hljs-string\">-u<\/span> <span class=\"hljs-string\">\/tmp\/wp-org-readme.txt<\/span> <span class=\"hljs-string\">\".\/readme.txt\"<\/span> <span class=\"hljs-string\">||<\/span> <span class=\"hljs-literal\">true<\/span>\n\n            <span class=\"hljs-bullet\">-<\/span> <span class=\"hljs-attr\">name:<\/span> <span class=\"hljs-string\">Deploy<\/span> <span class=\"hljs-string\">readme.txt<\/span> <span class=\"hljs-string\">to<\/span> <span class=\"hljs-string\">WordPress.org<\/span>\n              <span class=\"hljs-attr\">uses:<\/span> <span class=\"hljs-string\">10up\/action-wordpress-plugin-asset-update@stable<\/span>\n              <span class=\"hljs-attr\">env:<\/span>\n                  <span class=\"hljs-attr\">SVN_PASSWORD:<\/span> <span class=\"hljs-string\">${{<\/span> <span class=\"hljs-string\">secrets.SVN_PASSWORD<\/span> <span class=\"hljs-string\">}}<\/span>\n                  <span class=\"hljs-attr\">SVN_USERNAME:<\/span> <span class=\"hljs-string\">${{<\/span> <span class=\"hljs-string\">secrets.SVN_USERNAME<\/span> <span class=\"hljs-string\">}}<\/span>\n                  <span class=\"hljs-attr\">SLUG:<\/span> <span class=\"hljs-string\">${{<\/span> <span class=\"hljs-string\">github.event.repository.name<\/span> <span class=\"hljs-string\">}}<\/span>\n                  <span class=\"hljs-attr\">SKIP_ASSETS:<\/span> <span class=\"hljs-literal\">true<\/span>\n                  <span class=\"hljs-attr\">IGNORE_OTHER_FILES:<\/span> <span class=\"hljs-literal\">true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">YAML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">yaml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>I&#8217;m already using this in my <a href=\"https:\/\/wordpress.org\/plugins\/ai-services\/\">AI Services plugin<\/a>, and you can see the workflow in action here: <a href=\"https:\/\/github.com\/felixarntz\/ai-services\/blob\/main\/.github\/workflows\/bump-tested-up-to-dotorg.yml\">https:\/\/github.com\/felixarntz\/ai-services\/blob\/main\/.github\/workflows\/bump-tested-up-to-dotorg.yml<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Easy to Adopt: Just Copy and Paste<\/h2>\n\n\n\n<p>The code for this workflow is entirely self-contained and not tied to the AI Services plugin in any way. You can simply copy and paste the contents of the <code>bump-tested-up-to-dotorg.yml<\/code> file from above or from the AI Services repository into your own WordPress plugin&#8217;s GitHub repository (under <code>.github\/workflows\/<\/code>).<\/p>\n\n\n\n<p>To use the workflow, you can simply dispatch it manually whenever you want to bump the &#8220;Tested Up To&#8221; version, by navigating to <code>https:\/\/github.com\/USERNAME\/REPOSITORY\/actions\/workflows\/bump-tested-up-to-dotorg.yml<\/code> and selecting &#8220;Run workflow&#8221;.<\/p>\n\n\n\n<p>By using this GitHub workflow, you can ensure that your plugin&#8217;s &#8220;Tested Up To&#8221; version is always current without the need for a full release cycle or the risk of accidentally deploying other changes. This is a small automation that can save you time and potential headaches.<\/p>\n\n\n\n<p>I hope you find this workflow useful for your own WordPress plugin maintenance! Feel free to take a look at the implementation and use it in your own plugin as is, or adapt it to your needs. If you have any feedback or suggestions for improvement, I&#8217;d love to hear them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keeping the &#8220;Tested Up To&#8221; version of your WordPress plugin up-to-date on WordPress.org is crucial for ensuring compatibility and giving your users confidence. However, the process of manually updating this information can be a bit tedious, often involving a new release even if no other code changes are necessary. While there are existing GitHub Actions [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2089,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[95,97],"tags":[],"class_list":["post-2085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-plugin-development","category-wordpress"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Deploying Your WordPress Plugin&#039;s &quot;Tested Up To&quot; Version Bump in Isolation - felix-arntz.me<\/title>\n<meta name=\"description\" content=\"Learn how you can automate bumping the &quot;Tested Up To&quot; version in the WordPress plugin directory safely, without risk of deploying more.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deploying Your WordPress Plugin&#039;s &quot;Tested Up To&quot; Version Bump in Isolation - felix-arntz.me\" \/>\n<meta property=\"og:description\" content=\"Learn how you can automate bumping the &quot;Tested Up To&quot; version in the WordPress plugin directory safely, without risk of deploying more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\" \/>\n<meta property=\"og:site_name\" content=\"felix-arntz.me\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-08T14:01:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-20T19:54:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felix\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:site\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felix\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\"},\"author\":{\"name\":\"Felix\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"headline\":\"Deploying Your WordPress Plugin&#8217;s &#8220;Tested Up To&#8221; Version Bump in Isolation\",\"datePublished\":\"2025-05-08T14:01:41+00:00\",\"dateModified\":\"2025-05-20T19:54:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\"},\"wordCount\":771,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif\",\"articleSection\":[\"Plugin Development\",\"WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\",\"url\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\",\"name\":\"Deploying Your WordPress Plugin's \\\"Tested Up To\\\" Version Bump in Isolation - felix-arntz.me\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif\",\"datePublished\":\"2025-05-08T14:01:41+00:00\",\"dateModified\":\"2025-05-20T19:54:15+00:00\",\"description\":\"Learn how you can automate bumping the \\\"Tested Up To\\\" version in the WordPress plugin directory safely, without risk of deploying more.\",\"breadcrumb\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif\",\"width\":1024,\"height\":576,\"caption\":\"Illustration showing an arrow pointing from the GitHub logo to the WordPress logo, with a few other icons in between\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/felix-arntz.me\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Plugin Development\",\"item\":\"https:\/\/felix-arntz.me\/blog\/category\/plugin-development\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Deploying Your WordPress Plugin&#8217;s &#8220;Tested Up To&#8221; Version Bump in Isolation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/felix-arntz.me\/#website\",\"url\":\"https:\/\/felix-arntz.me\/\",\"name\":\"felix-arntz.me\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/felix-arntz.me\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\",\"name\":\"Felix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Felix\"},\"logo\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\"},\"description\":\"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.\",\"sameAs\":[\"https:\/\/x.com\/felixarntz\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deploying Your WordPress Plugin's \"Tested Up To\" Version Bump in Isolation - felix-arntz.me","description":"Learn how you can automate bumping the \"Tested Up To\" version in the WordPress plugin directory safely, without risk of deploying more.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/","og_locale":"en_US","og_type":"article","og_title":"Deploying Your WordPress Plugin's \"Tested Up To\" Version Bump in Isolation - felix-arntz.me","og_description":"Learn how you can automate bumping the \"Tested Up To\" version in the WordPress plugin directory safely, without risk of deploying more.","og_url":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/","og_site_name":"felix-arntz.me","article_published_time":"2025-05-08T14:01:41+00:00","article_modified_time":"2025-05-20T19:54:15+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","type":"image\/jpeg"}],"author":"Felix","twitter_card":"summary_large_image","twitter_creator":"@felixarntz","twitter_site":"@felixarntz","twitter_misc":{"Written by":"Felix","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#article","isPartOf":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/"},"author":{"name":"Felix","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"headline":"Deploying Your WordPress Plugin&#8217;s &#8220;Tested Up To&#8221; Version Bump in Isolation","datePublished":"2025-05-08T14:01:41+00:00","dateModified":"2025-05-20T19:54:15+00:00","mainEntityOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/"},"wordCount":771,"commentCount":3,"publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","articleSection":["Plugin Development","WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/","url":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/","name":"Deploying Your WordPress Plugin's \"Tested Up To\" Version Bump in Isolation - felix-arntz.me","isPartOf":{"@id":"https:\/\/felix-arntz.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","datePublished":"2025-05-08T14:01:41+00:00","dateModified":"2025-05-20T19:54:15+00:00","description":"Learn how you can automate bumping the \"Tested Up To\" version in the WordPress plugin directory safely, without risk of deploying more.","breadcrumb":{"@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#primaryimage","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","width":1024,"height":576,"caption":"Illustration showing an arrow pointing from the GitHub logo to the WordPress logo, with a few other icons in between"},{"@type":"BreadcrumbList","@id":"https:\/\/felix-arntz.me\/blog\/deploying-your-wordpress-plugins-tested-up-to-version-bump-in-isolation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/felix-arntz.me\/"},{"@type":"ListItem","position":2,"name":"Plugin Development","item":"https:\/\/felix-arntz.me\/blog\/category\/plugin-development\/"},{"@type":"ListItem","position":3,"name":"Deploying Your WordPress Plugin&#8217;s &#8220;Tested Up To&#8221; Version Bump in Isolation"}]},{"@type":"WebSite","@id":"https:\/\/felix-arntz.me\/#website","url":"https:\/\/felix-arntz.me\/","name":"felix-arntz.me","description":"","publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felix-arntz.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55","name":"Felix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","width":512,"height":512,"caption":"Felix"},"logo":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/"},"description":"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.","sameAs":["https:\/\/x.com\/felixarntz"]}]}},"jetpack_featured_media_url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/04\/wordpress-plugin-bump-tested-up-to-version-from-github.avif","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/comments?post=2085"}],"version-history":[{"count":3,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2085\/revisions"}],"predecessor-version":[{"id":2088,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2085\/revisions\/2088"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media\/2089"}],"wp:attachment":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media?parent=2085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/categories?post=2085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/tags?post=2085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}