feat: implement git:from-archive

The previous tar support lacked the ability to track changes between tarball deploys. Critically, it also failed to be handled correctly when there was _also_ a git deployment done on the app, resulting in odd deployment states depending on the angles of the moon and the sun in the sky.

Rather than try to "fix" this through some hokey mechanism, importing the tar file contents into the git repository is preferred, as then the user can refer to the repository for commit history.

Additionally, we add support for non-tar files (tar.gz and zip), enabling deployments from systems that do not create tar files, such as Github (their tarball url is a tar.gz file).

Finally, this deprecates the tar plugin, and sets it to be removed in the next minor release (in addition to the tags plugin).

Closes #3458
Closes #4207
This commit is contained in:
Jose Diaz-Gonzalez
2021-03-01 04:45:37 -05:00
parent ade2cc8a7c
commit 5c1a1baf08
10 changed files with 210 additions and 7 deletions

75
tests/unit/git_5.bats Normal file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bats
load test_helper
setup() {
global_setup
create_app
touch /home/dokku/.ssh/known_hosts
chown dokku:dokku /home/dokku/.ssh/known_hosts
}
teardown() {
rm -f /home/dokku/.ssh/id_rsa.pub || true
destroy_app
global_teardown
}
@test "(git) git:from-archive [missing]" {
run /bin/bash -c "dokku git:from-archive $TEST_APP"
echo "output: $output"
echo "status: $status"
assert_failure
}
@test "(git) git:from-archive [invalid archive type]" {
run /bin/bash -c "dokku git:from-archive --archive-type tarball $TEST_APP http://example.com/src.tar"
echo "output: $output"
echo "status: $status"
assert_failure
}
@test "(git) git:from-archive [tar]" {
run /bin/bash -c "dokku git:from-archive $TEST_APP https://github.com/dokku/smoke-test-app/releases/download/2.0.0/smoke-test-app.tar"
echo "output: $output"
echo "status: $status"
assert_success
assert_http_success http://${TEST_APP}.dokku.me
}
@test "(git) git:from-archive [tar.gz]" {
run /bin/bash -c "dokku git:from-archive --archive-type tar.gz $TEST_APP https://github.com/dokku/smoke-test-app/archive/2.0.0.tar.gz"
echo "output: $output"
echo "status: $status"
assert_success
assert_http_success http://${TEST_APP}.dokku.me
}
@test "(git) git:from-archive [zip]" {
run /bin/bash -c "dokku git:from-archive --archive-type zip $TEST_APP https://github.com/dokku/smoke-test-app/archive/2.0.0.zip"
echo "output: $output"
echo "status: $status"
assert_success
assert_http_success http://${TEST_APP}.dokku.me
}
@test "(git) git:from-archive [stdin-file]" {
run /bin/bash -c "curl -sL https://github.com/dokku/smoke-test-app/releases/download/2.0.0/smoke-test-app.tar -o /tmp/smoke-test-app.tar"
echo "output: $output"
echo "status: $status"
assert_success
run /bin/bash -c "cat /tmp/smoke-test-app.tar | dokku git:from-archive $TEST_APP --"
echo "output: $output"
echo "status: $status"
assert_success
assert_http_success http://${TEST_APP}.dokku.me
}
@test "(git) git:from-archive [stdin-curl]" {
run /bin/bash -c "curl -sL https://github.com/dokku/smoke-test-app/releases/download/2.0.0/smoke-test-app.tar | dokku git:from-archive $TEST_APP --"
echo "output: $output"
echo "status: $status"
assert_success
assert_http_success http://${TEST_APP}.dokku.me
}