Is there a way to auto update my github repo? - web

I have a website running on cloud server. Can I link the related files to my github repository. So whenever I make any changes to my website, it get auto updated in my github repository?

Assuming you have your cloud server running an OS that support bash script, add this file to your repository.
Let's say your files are located in /home/username/server and we name the file below /home/username/server/AUTOUPDATE.
#!/usr/bin/env bash
cd $(dirname ${BASH_SOURCE[0]})
if [[ -n $(git status -s) ]]; then
echo "Changes found. Pushing changes..."
git add -A && git commit -m 'update' && git push
else
echo "No changes found. Skip pushing."
fi
Then, add a scheduled task like crontab to run this script as frequent as you want your github to be updated. It will check if there is any changes first and only commit and push all changes if there is any changes.
This will run every the script every second.
*/60 * * * * /home/username/server/AUTOUPDATE
Don't forget to give this file execute permission with chmod +x /home/username/server/AUTOUPDATE
This will always push the changes with the commit message of "update".

Related

Cannot automatically push commits from script

I used the following script (autoupdate.sh) to update my git repository automatically using SSH whenever I make a change to the local repository in raspberry pi 3B.
#!/usr/bin/env bash
DATADIR="/home/pi/data"
cd $DATADIR
if [[ -n $(git status -s) ]]; then
echo "Changed found. Pushing changes..."
git add -A && git commit -m "$1: Update files" && git push origin main
else
echo "No changes found. Skip pushing."
fi
Then I call a script measurement.sh that calls the above script whenever the internet is connected ( I used 4G dongle USB). Something like
...
cd ~/data; bash autoupdate.sh $DATE
...
However, when I run sudo bash measurement.sh it encountered the errors (It has made a commit but not push). Without sudo it works fine.
Permission denied(public key)
...
I checked from GitHub document https://docs.github.com/en/github/authenticating-to-github/troubleshooting-ssh/error-permission-denied-publickey by regenerating the ssh key as well as verified the public key but it did not solve at all. When I pushed commits in a separate terminal it works fines so I do not think the issue relates to the SSH key. I doubt that to run the script successfully it with sudo, the SSH keygen must also be generated with sudo at first.
What could be the reasons for it?
Without sudo it works fine.
So why use sudo in the first place.
As commented, using sudo alone means using commands as root.
At least, a sudo -u <auser> would means the ~ in cd ~/data would be resolved by the appropriate /home/auser, instead of /root.

Bash script triggered remotely via ssh not working properly

I have a script on a remote machine which contains a for loop as below:
#!/bin/bash -eux
# execute build.sh in each component
for f in workspace/**/**/build.sh ; do
echo $f
REPO=${f%*build.sh}
echo $REPO
git -C ./$REPO checkout master
git -C ./$REPO pull origin master
$f
done
This script is finding all the repos with a build.sh file inside, pulls the latest changes and build them.
This works fine when I execute the scrript on the machine but when I try to trigger this script remotely the for loop just runs once, and I see that it returns a repo which actually doesn't have build.sh at all:
$ ssh devops "~/build.sh"
+ for f in workspace/**/**/build.sh
+ echo 'workspace/**/**/build.sh'
+ REPO='workspace/**/**/'
+ echo workspace/core/auth/
workspace/**/**/build.sh
workspace/core/auth/
+ git -C ./workspace/core/auth/ checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
+ git -C ./workspace/core/auth/ pull origin master
From https://gitlabe.com/workspace/core/auth
* branch master -> FETCH_HEAD
Already up to date.
+ 'workspace/**/**/build.sh'
/home/devops/build.sh: line 10: workspace/**/**/build.sh: No such file or directory
I tried to make a one-liner of the for loop and use ssh and that also didn't work. How can I solve this problem?
You need to enable globbing on the remote machine. Add this to the beginning of your script:
shopt -s globstar
Also see this thread

Git Auto Commit Daily

Could I do take commit my changes in a directory by a daily routine? Say, In every 12 AM at early morning, It should commit all the changes in that directory automatically? Is it possible in git? I get some answers for auto commit for every changes. But I want it for daily once commit.
If you simply want to commit ALL changes every morning at 12 AM, you can do this using a cronjob.
Assuming that you are using a linux distribution with bash, you can write a bash script that does the commit
#!/bin/bash
cd <git directory> && git add -A && git commit * --allow-empty-message -m ''
Then you can place this cron job in /etc/cron.d/
0 0 * * * <username> /bin/bash <script location>
If you intend to run this as your own user only then you can instead add it to your personal crontab interactively by running
crontab -e

git alias not receiving parameters

I've been trying to create a new alias that send files to staging area, and at the same time it commit with a message.
I've tried this:
git config --global alias.stagecomm '!git add -A && git commit -m $1'
When I try to run:
git stagecomm "Commit"
It says that it didn't match any files known to git.
Try with a sh: edit your git config --global --edit and type:
!sh -c 'git add -A && git commit -m $1'
Another option: define a script (even on Windows) without extension, called git-stagecomm
In it, put your commands:
git add -A
git commit -m $1
If that script is in your path, you will be able to call it with git stagecomm "mymessage"
Any script called git-xxx will be executed by the git bash, as git xxx.
No alias needed there.
That being said, you could also type (without alias)
git commit -am "My message"
See git commit man page.
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
That would not take new files though.

How to automate workflow in git?

Now I do this:
git commit -a -m "comment"
then (to bitbucket.org)
git push
then (to hosting via ftp)
git ftp push
I want to run these commands automatically:
git fix "comment"
or so:
gitfix "comment"
Create a bash function:
gitfix() {
git commit -a -m "$1" && git push && git ftp push
}
and put it in your ~/.bashrc file so you can just execute it from the terminal as gitfix "some commit comment"
Update: Concatenated the commands with &&, so, in case of failure, the remaining commands will not be executed. Thanks to burper for this update.

Resources