change to master tag of internal-apis docker image
This commit is contained in:
parent
6438048f40
commit
e477759395
10 changed files with 72 additions and 49 deletions
10
.travis.yml
10
.travis.yml
|
@ -19,17 +19,23 @@ addons:
|
||||||
apt:
|
apt:
|
||||||
update: true
|
update: true
|
||||||
packages:
|
packages:
|
||||||
- youtube-dl
|
|
||||||
- ffmpeg
|
- ffmpeg
|
||||||
- tree
|
- tree
|
||||||
|
- python-pip
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- sudo pip install -U youtube-dl
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- GO111MODULE=on
|
- GO111MODULE=on
|
||||||
#GITHUB_TOKEN
|
#GITHUB_TOKEN
|
||||||
- secure: "Ps3KocRP5xnM3/uA99CeYhDTVxRIuW7fGyrtqBeRWZW0cXzeA4XCTKxqcFbrPUPw67XkrBVgE58JDdWoQEJ7tm67PjMm/ltp5Evhx/QAJDh+YSofXyGDVpG1mrTZFI66R3NVVJLkSGALMkuWWXvfYZeU//AworJbyRoaIK/CVt5OP23i5N4tdd5UXc5dfLuYqnKRynyMmCkz9c3yEIQMXoPhG2hx7l7L2BeMJvcKmVhkSN7nQayjnrbUXGm/IRqrb88lvkyBevN5E3IB2V5IKEieIPZjbD/N0IfcnAt89Z96tgDhtIbx3ZvXm92lsvHA8buqQpG9d2AmSi6GKs64lQcnGeM5o0wER2JHWl1OSa1Nr/UAo5Xb/PM65Yt3yZE8AuMKHBmbfDSBzdkTXx58AeDzFUd3kMXD/fFjeQQWyXFlOss3ygH9SObl827Txmz9OJqZaxabs5Q3AP6m3EjKjz7zfLfrgpcxJM2WBiU1bN0ZxUgZkImy/CHk5gCZ7vhcnaLiDO4HZnzY/aRJwKYQPE5i0O2nHpIfovqkc0DFBA7U/7Cjin7e1E0UZvF3meLOxMqkfc6X7QTxqQpt2Tej6jlpdxw4CTLwGUhGkAw9IAPkUB3L0EbZ1/ksGhNvGDvUeSTq8hYdMAPmA+k9jS6653V4SQ+qBMy5++tbr5AeZQI="
|
- secure: "Ps3KocRP5xnM3/uA99CeYhDTVxRIuW7fGyrtqBeRWZW0cXzeA4XCTKxqcFbrPUPw67XkrBVgE58JDdWoQEJ7tm67PjMm/ltp5Evhx/QAJDh+YSofXyGDVpG1mrTZFI66R3NVVJLkSGALMkuWWXvfYZeU//AworJbyRoaIK/CVt5OP23i5N4tdd5UXc5dfLuYqnKRynyMmCkz9c3yEIQMXoPhG2hx7l7L2BeMJvcKmVhkSN7nQayjnrbUXGm/IRqrb88lvkyBevN5E3IB2V5IKEieIPZjbD/N0IfcnAt89Z96tgDhtIbx3ZvXm92lsvHA8buqQpG9d2AmSi6GKs64lQcnGeM5o0wER2JHWl1OSa1Nr/UAo5Xb/PM65Yt3yZE8AuMKHBmbfDSBzdkTXx58AeDzFUd3kMXD/fFjeQQWyXFlOss3ygH9SObl827Txmz9OJqZaxabs5Q3AP6m3EjKjz7zfLfrgpcxJM2WBiU1bN0ZxUgZkImy/CHk5gCZ7vhcnaLiDO4HZnzY/aRJwKYQPE5i0O2nHpIfovqkc0DFBA7U/7Cjin7e1E0UZvF3meLOxMqkfc6X7QTxqQpt2Tej6jlpdxw4CTLwGUhGkAw9IAPkUB3L0EbZ1/ksGhNvGDvUeSTq8hYdMAPmA+k9jS6653V4SQ+qBMy5++tbr5AeZQI="
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- ./e2e/e2e.sh
|
#- ./e2e/e2e.sh # Hold until we can resolve the /var/tmp issue - talk to beamer/niko
|
||||||
|
- make
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
provider: script
|
provider: script
|
||||||
skip_cleanup: true
|
skip_cleanup: true
|
||||||
|
|
21
e2e/data_setup.sh
Executable file
21
e2e/data_setup.sh
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
#Add a ytsync user
|
||||||
|
ADDYTSYNCUSER='INSERT INTO user (given_name) VALUE("ytsync user")'
|
||||||
|
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCUSER"
|
||||||
|
#Insert an auth token for the user to be used by ytsync
|
||||||
|
ADDYTSYNCAUTHTOKEN='INSERT INTO auth_token (user_id, value) VALUE(1,"ytsyntoken")'
|
||||||
|
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCAUTHTOKEN"
|
||||||
|
#Give priveledges to ytsync user
|
||||||
|
ASSIGNGROOP='INSERT INTO user_groop (user_id, groop_id) VALUE( 1,3)'
|
||||||
|
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ASSIGNGROOP"
|
||||||
|
|
||||||
|
#Add youtuber to sync
|
||||||
|
ADDYTSYNCER='INSERT INTO user (given_name) VALUE("youtuber")'
|
||||||
|
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCER"
|
||||||
|
#Add their youtube channel to be synced
|
||||||
|
ADDYTCHANNEL="INSERT INTO youtube_data (user_id, status_token,desired_lbry_channel,channel_id,channel_name,status,created_at,source,total_videos,total_subscribers)
|
||||||
|
VALUE(2,'3qzGyuVjQaf7t4pKKu2Er1NRW2LJkeWw','@beamertest','UCCyr5j8akeu9j4Q7urV0Lqw','BeamerAtLBRY','queued','2019-08-01 00:00:00','sync',1,0)"
|
||||||
|
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTCHANNEL"
|
|
@ -26,12 +26,14 @@ services:
|
||||||
## Wallet Server ##
|
## Wallet Server ##
|
||||||
###################
|
###################
|
||||||
walletserver:
|
walletserver:
|
||||||
image: lbry/wallet-server:master
|
image: lbry/wallet-server:v0.38.5
|
||||||
networks:
|
networks:
|
||||||
- e2e
|
- e2e
|
||||||
restart: always
|
restart: always
|
||||||
|
#volumes:
|
||||||
|
# - "./persist/.walletserver:/database"
|
||||||
environment:
|
environment:
|
||||||
- DB_DIRECTORY=/tmp/
|
- DB_DIRECTORY=/database
|
||||||
- MAX_SEND=1000000000000000000000
|
- MAX_SEND=1000000000000000000000
|
||||||
- DAEMON_URL=http://lbry:lbry@lbrycrd:29245
|
- DAEMON_URL=http://lbry:lbry@lbrycrd:29245
|
||||||
- MAX_SUBS=1000000000000
|
- MAX_SUBS=1000000000000
|
||||||
|
@ -57,7 +59,7 @@ services:
|
||||||
image: lbry/lbrynet:v0.38.5
|
image: lbry/lbrynet:v0.38.5
|
||||||
networks:
|
networks:
|
||||||
- e2e
|
- e2e
|
||||||
restart: "no"
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "15100:5279"
|
- "15100:5279"
|
||||||
- "15101:5280"
|
- "15101:5280"
|
||||||
|
@ -72,7 +74,12 @@ services:
|
||||||
- "./persist/.lbrynet:/home/lbrynet"
|
- "./persist/.lbrynet:/home/lbrynet"
|
||||||
- ".:/etc/lbry" #Put your daemon_settings.yml here
|
- ".:/etc/lbry" #Put your daemon_settings.yml here
|
||||||
# /private/var/tmp for OSX and /var/tmp for Linux
|
# /private/var/tmp for OSX and /var/tmp for Linux
|
||||||
- "${LOCAL_TMP_DIR}:/var/tmp"
|
- "${LOCAL_TMP_DIR}"
|
||||||
|
# - type: bind
|
||||||
|
# source: "${LOCAL_TMP_DIR}"
|
||||||
|
# target: "/tmp"
|
||||||
|
# bind:
|
||||||
|
# propagation: rshared
|
||||||
#entrypoint: wait-for-it walletserver:50001 -- start
|
#entrypoint: wait-for-it walletserver:50001 -- start
|
||||||
###########
|
###########
|
||||||
## MySQL ##
|
## MySQL ##
|
||||||
|
@ -96,7 +103,7 @@ services:
|
||||||
## Internal APIs ##
|
## Internal APIs ##
|
||||||
###################
|
###################
|
||||||
internalapis:
|
internalapis:
|
||||||
image: lbry/internal-apis:latest
|
image: lbry/internal-apis:master
|
||||||
networks:
|
networks:
|
||||||
- e2e
|
- e2e
|
||||||
restart: "no"
|
restart: "no"
|
||||||
|
|
43
e2e/e2e.sh
43
e2e/e2e.sh
|
@ -6,7 +6,7 @@ set -e
|
||||||
make
|
make
|
||||||
|
|
||||||
#OVERRIDE this in your .env file if running from mac. Check docker-compose.yml for details
|
#OVERRIDE this in your .env file if running from mac. Check docker-compose.yml for details
|
||||||
export LOCAL_TMP_DIR="/var/tmp"
|
export LOCAL_TMP_DIR="/var/tmp:/var/tmp"
|
||||||
|
|
||||||
#Private Variables Set in local installations: SLACK_TOKEN,YOUTUBE_API_KEY,AWS_S3_ID,AWS_S3_SECRET,AWS_S3_REGION,AWS_S3_BUCKET
|
#Private Variables Set in local installations: SLACK_TOKEN,YOUTUBE_API_KEY,AWS_S3_ID,AWS_S3_SECRET,AWS_S3_REGION,AWS_S3_BUCKET
|
||||||
touch -a .env && set -o allexport; source ./.env; set +o allexport
|
touch -a .env && set -o allexport; source ./.env; set +o allexport
|
||||||
|
@ -28,21 +28,17 @@ export LBRYNET_WALLETS_DIR="$(pwd)/e2e/persist/.lbrynet/.local/share/lbry/lbryum
|
||||||
export TMP_DIR="/var/tmp"
|
export TMP_DIR="/var/tmp"
|
||||||
export UID
|
export UID
|
||||||
|
|
||||||
#ensure that docker can be run and managed from the user
|
|
||||||
USER=$(whoami)
|
|
||||||
sudo usermod -aG docker "$USER"
|
|
||||||
|
|
||||||
cd ./e2e
|
cd ./e2e
|
||||||
docker-compose stop
|
docker-compose stop
|
||||||
docker-compose rm -f
|
docker-compose rm -f
|
||||||
echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
|
echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
|
||||||
docker-compose pull
|
docker-compose pull
|
||||||
if [[ -d persist ]]; then rm -rf persist; fi
|
if [[ -d persist ]]; then rm -rf persist; fi
|
||||||
rm -rf persist
|
mkdir -m 0777 -p ./persist
|
||||||
mkdir persist
|
mkdir -m 777 -p ./persist/.walletserver
|
||||||
mkdir -p blobsfiles
|
mkdir -m 777 -p ./persist/.lbrynet
|
||||||
mkdir persist/.lbrynet
|
#sudo chown -Rv 999:999 ./persist/.walletserver
|
||||||
chmod 777 -R ./persist
|
#sudo chown -Rv 1000:1000 ./persist/.lbrynet
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
printf 'waiting for internal apis'
|
printf 'waiting for internal apis'
|
||||||
until curl --output /dev/null --silent --head --fail http://localhost:15400; do
|
until curl --output /dev/null --silent --head --fail http://localhost:15400; do
|
||||||
|
@ -51,38 +47,19 @@ until curl --output /dev/null --silent --head --fail http://localhost:15400; do
|
||||||
done
|
done
|
||||||
echo "successfully started..."
|
echo "successfully started..."
|
||||||
|
|
||||||
# make sure we have permission to mess with the volumes
|
|
||||||
sudo find ./persist -type d -exec chmod 777 {} \;
|
|
||||||
sudo chown "$USER": -R ./persist
|
|
||||||
|
|
||||||
#Data Setup for test
|
#Data Setup for test
|
||||||
#Add a ytsync user
|
./data_setup.sh
|
||||||
ADDYTSYNCUSER='INSERT INTO user (given_name) VALUE("ytsync user")'
|
|
||||||
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCUSER"
|
|
||||||
#Insert an auth token for the user to be used by ytsync
|
|
||||||
ADDYTSYNCAUTHTOKEN='INSERT INTO auth_token (user_id, value) VALUE(1,"ytsyntoken")'
|
|
||||||
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCAUTHTOKEN"
|
|
||||||
#Give priveledges to ytsync user
|
|
||||||
ASSIGNGROOP='INSERT INTO user_groop (user_id, groop_id) VALUE( 1,3)'
|
|
||||||
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ASSIGNGROOP"
|
|
||||||
|
|
||||||
#Add youtuber to sync
|
|
||||||
ADDYTSYNCER='INSERT INTO user (given_name) VALUE("youtuber")'
|
|
||||||
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTSYNCER"
|
|
||||||
#Add their youtube channel to be synced
|
|
||||||
ADDYTCHANNEL="INSERT INTO youtube_data (user_id, status_token,desired_lbry_channel,channel_id,channel_name,status,google_id,google_token,created_at,source,total_videos,total_subscribers)
|
|
||||||
VALUE(2,'3qzGyuVjQaf7t4pKKu2Er1NRW2LJkeWw','@beamertest','UCCyr5j8akeu9j4Q7urV0Lqw','BeamerAtLBRY','queued',$GOOGLE_ID,'$GOOGLE_TOKEN','2019-08-01 00:00:00','sync',1,0)"
|
|
||||||
mysql -u lbry -plbry -D lbry -h "127.0.0.1" -P 15500 -e "$ADDYTCHANNEL"
|
|
||||||
|
|
||||||
|
|
||||||
# Execute the test!
|
# Execute the test!
|
||||||
./../bin/ytsync --channelID UCCyr5j8akeu9j4Q7urV0Lqw #Force channel intended...just in case. This channel lines up with the api container
|
./../bin/ytsync --channelID UCCyr5j8akeu9j4Q7urV0Lqw #Force channel intended...just in case. This channel lines up with the api container
|
||||||
# Assert the status
|
# Assert the status
|
||||||
status=$(mysql -u lbry -plbry -ss -D lbry -h "127.0.0.1" -P 15500 -e 'SELECT status FROM youtube_data WHERE id=1')
|
status=$(mysql -u lbry -plbry -ss -D lbry -h "127.0.0.1" -P 15500 -e 'SELECT status FROM youtube_data WHERE id=1')
|
||||||
videoStatus=$(mysql -u lbry -plbry -ss -D lbry -h "127.0.0.1" -P 15500 -e 'SELECT status FROM synced_video WHERE id=1')
|
videoStatus=$(mysql -u lbry -plbry -ss -D lbry -h "127.0.0.1" -P 15500 -e 'SELECT status FROM synced_video WHERE id=1')
|
||||||
if [[ $status != "synced" && $videoStatus != "published" ]]; then
|
if [[ $status != "synced" || $videoStatus != "published" ]]; then
|
||||||
docker-compose logs --tail="all" lbrycrd
|
docker-compose logs --tail="all" lbrycrd
|
||||||
docker-compose logs --tail="all" walletserver
|
docker-compose logs --tail="all" walletserver
|
||||||
docker-compose logs --tail="all" lbrynet
|
docker-compose logs --tail="all" lbrynet
|
||||||
docker-compose logs --tail="all" internalapis
|
docker-compose logs --tail="all" internalapis
|
||||||
|
echo "List local /var/tmp"
|
||||||
|
find /var/tmp
|
||||||
exit 1; fi;
|
exit 1; fi;
|
|
@ -112,7 +112,7 @@ func (s *SyncManager) Start() error {
|
||||||
for {
|
for {
|
||||||
err := s.checkUsedSpace()
|
err := s.checkUsedSpace()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var syncs []Sync
|
var syncs []Sync
|
||||||
|
@ -122,7 +122,7 @@ func (s *SyncManager) Start() error {
|
||||||
if isSingleChannelSync {
|
if isSingleChannelSync {
|
||||||
channels, err := s.apiConfig.FetchChannels("", s.syncProperties)
|
channels, err := s.apiConfig.FetchChannels("", s.syncProperties)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
if len(channels) != 1 {
|
if len(channels) != 1 {
|
||||||
return errors.Err("Expected 1 channel, %d returned", len(channels))
|
return errors.Err("Expected 1 channel, %d returned", len(channels))
|
||||||
|
|
|
@ -289,6 +289,10 @@ func (s *Sync) FullCycle() (e error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, 0)
|
return errors.Wrap(err, 0)
|
||||||
}
|
}
|
||||||
|
err = os.Chmod(s.videoDirectory, 0766)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
|
||||||
defer deleteSyncFolder(s.videoDirectory)
|
defer deleteSyncFolder(s.videoDirectory)
|
||||||
log.Printf("Starting daemon")
|
log.Printf("Starting daemon")
|
||||||
|
|
|
@ -71,7 +71,7 @@ func (a *APIConfig) FetchChannels(status string, cp *SyncProperties) ([]YoutubeC
|
||||||
var response apiJobsResponse
|
var response apiJobsResponse
|
||||||
err = json.Unmarshal(body, &response)
|
err = json.Unmarshal(body, &response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, errors.Err(err)
|
||||||
}
|
}
|
||||||
if response.Data == nil {
|
if response.Data == nil {
|
||||||
return nil, errors.Err(response.Error)
|
return nil, errors.Err(response.Error)
|
||||||
|
@ -152,7 +152,7 @@ func (a *APIConfig) SetChannelStatus(channelID string, status string, failureRea
|
||||||
var response apiChannelStatusResponse
|
var response apiChannelStatusResponse
|
||||||
err := json.Unmarshal(body, &response)
|
err := json.Unmarshal(body, &response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, errors.Err(err)
|
||||||
}
|
}
|
||||||
if !response.Error.IsNull() {
|
if !response.Error.IsNull() {
|
||||||
return nil, nil, errors.Err(response.Error.String)
|
return nil, nil, errors.Err(response.Error.String)
|
||||||
|
|
|
@ -178,7 +178,7 @@ func (v *YoutubeVideo) getAbbrevDescription() string {
|
||||||
func (v *YoutubeVideo) download(useIPv6 bool) error {
|
func (v *YoutubeVideo) download(useIPv6 bool) error {
|
||||||
videoPath := v.getFullPath()
|
videoPath := v.getFullPath()
|
||||||
|
|
||||||
err := os.Mkdir(v.videoDir(), 0750)
|
err := os.Mkdir(v.videoDir(), 0777)
|
||||||
if err != nil && !strings.Contains(err.Error(), "file exists") {
|
if err != nil && !strings.Contains(err.Error(), "file exists") {
|
||||||
return errors.Wrap(err, 0)
|
return errors.Wrap(err, 0)
|
||||||
}
|
}
|
||||||
|
@ -310,6 +310,10 @@ runcmd:
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Err(err)
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
|
err = os.Chmod(v.getFullPath(), 0777)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
videoSize := fi.Size()
|
videoSize := fi.Size()
|
||||||
v.size = &videoSize
|
v.size = &videoSize
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -25,7 +25,7 @@ const thumbnailPath = "/tmp/ytsync_thumbnails/"
|
||||||
const ThumbnailEndpoint = "https://thumbnails.lbry.com/"
|
const ThumbnailEndpoint = "https://thumbnails.lbry.com/"
|
||||||
|
|
||||||
func (u *thumbnailUploader) downloadThumbnail() error {
|
func (u *thumbnailUploader) downloadThumbnail() error {
|
||||||
_ = os.Mkdir(thumbnailPath, 0750)
|
_ = os.Mkdir(thumbnailPath, 0777)
|
||||||
img, err := os.Create("/tmp/ytsync_thumbnails/" + u.name)
|
img, err := os.Create("/tmp/ytsync_thumbnails/" + u.name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Err(err)
|
return errors.Err(err)
|
||||||
|
|
10
util/util.go
10
util/util.go
|
@ -166,7 +166,7 @@ func CleanForStartup() error {
|
||||||
|
|
||||||
err = CleanupLbrynet()
|
err = CleanupLbrynet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
lbrycrd, err := GetLbrycrdClient(os.Getenv("LBRYCRD_STRING"))
|
lbrycrd, err := GetLbrycrdClient(os.Getenv("LBRYCRD_STRING"))
|
||||||
|
@ -187,7 +187,11 @@ func CleanForStartup() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultWalletDir := GetDefaultWalletPath()
|
defaultWalletDir := GetDefaultWalletPath()
|
||||||
return os.Remove(defaultWalletDir)
|
_, err = os.Stat(defaultWalletDir)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.Err(os.Remove(defaultWalletDir))
|
||||||
}
|
}
|
||||||
|
|
||||||
func CleanupLbrynet() error {
|
func CleanupLbrynet() error {
|
||||||
|
@ -215,7 +219,7 @@ func CleanupLbrynet() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Err(err)
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
err = os.Mkdir(blobsDir, 0755)
|
err = os.Mkdir(blobsDir, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Err(err)
|
return errors.Err(err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue