diff --git a/README.md b/README.md
index 6ce4bbb..48ba644 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,6 @@
 
 ### Project Administrators
 
-* [`autobump`](infra/): Update commit IDs in bitbake recipes to bring in new changes
 * [`openbmc-autobump.py`](infra/): Update commit IDs in bitbake recipes to bring in new changes
 
 ## Sending patches
diff --git a/infra/autobump.pl b/infra/autobump.pl
deleted file mode 100755
index bec2f82..0000000
--- a/infra/autobump.pl
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env perl
-
-# Contributors Listed Below - COPYRIGHT 2017
-# [+] International Business Machines Corp.
-#
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-# implied. See the License for the specific language governing
-# permissions and limitations under the License.
-
-use strict;
-use File::Basename qw/basename/;
-
-my $metas_to_search = "meta-phosphor meta-openbmc-machines meta-openbmc-bsp";
-my $master_project = "openbmc";
-my $server = "https://gerrit.openbmc-project.xyz";
-
-system("cd $master_project && git fetch origin && git checkout origin/master");
-
-open(FILES, "cd $master_project && git grep -l -e \"_URI\" --and -e \"github\" -- $metas_to_search |");
-
-my @to_update = ();
-
-while(my $file = <FILES>)
-{
-    chomp $file;
-
-    my $entry = {};
-    $entry->{FILE} = "$file";
-    $entry->{BRANCH} = "master";
-
-    open(FILE, "$master_project/$entry->{FILE}");
-    while(my $line = <FILE>)
-    {
-        chomp $line;
-
-        if ($line =~ m/SRCREV ?.*=/)
-        {
-            if ($line =~ m/"([0-9a-f]*)"/)
-            {
-                $entry->{SRCREV} = $1;
-            }
-        }
-        elsif ($line =~ m/_URI/ and $line =~ m/github.com\/$master_project\//)
-        {
-            $line =~ s/.*$master_project\//$master_project\//;
-            $line =~ s/"//g;
-            $line =~ s/\.git$//;
-            $entry->{SRC_URI} = $line;
-            print "$file : $line\n";
-        }
-    }
-    close FILE;
-
-    if (exists $entry->{SRC_URI} and exists $entry->{SRCREV})
-    {
-        push @to_update, $entry;
-    }
-}
-
-foreach my $entry (@to_update)
-{
-    my $project = $entry->{SRC_URI};
-    $project =~ s/\//%2F/g;
-    my $revision =
-        `curl -s $server/projects/$project/branches/$entry->{BRANCH}  | \
-         grep revision`;
-
-    if (not $revision =~ m/revision/)
-    {
-        next;
-    }
-    if ($revision =~ m/$entry->{SRCREV}/)
-    {
-        print "$entry->{SRC_URI} is up to date @ $entry->{SRCREV}\n";
-        next;
-    }
-
-    $revision =~ m/"([0-9a-f]*)"/;
-    $revision = $1;
-
-    print "$entry->{SRC_URI} needs to be updated\n";
-    print "\t$entry->{SRCREV} -> $revision\n";
-
-    my $changeId = `echo autobump $entry->{FILE} $entry->{SRCREV} $revision | git hash-object -t blob --stdin`;
-    chomp $changeId;
-    $changeId =~ s/[ \t]*//;
-    $changeId = "I$changeId";
-
-    my $change =
-        `curl -s $server/changes/$master_project%2F$master_project~$entry->{BRANCH}~$changeId | \
-         grep change_id`;
-
-    if ($change =~ m/$changeId/)
-    {
-        print "\t$changeId already present.\n";
-        next;
-    }
-
-    system("cd $master_project && git checkout origin/master --force &&".
-            " sed -i \"s/$entry->{SRCREV}/$revision/\" $entry->{FILE} &&".
-            " git add $entry->{FILE}");
-
-    open(COMMIT, "| cd $master_project && git commit -s -F -");
-    print COMMIT (basename $entry->{FILE}).": bump version\n";
-    print COMMIT "\n";
-    print COMMIT "Change-Id: $changeId\n";
-    close(COMMIT);
-
-    system("cd $master_project && git push origin HEAD:refs/for/master/autobump");
-
-}
