add travis autobuild scripts (courtesy of EmuTOS project)
This commit is contained in:
47
.travis.yml
Normal file
47
.travis.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
# BaS_gcc build script for Travis CI
|
||||
# This will automatically be run on every push to GitHub
|
||||
# Build History: https://travis-ci.org/firebee-org/BaS_gcc/builds/
|
||||
|
||||
language: c
|
||||
os: linux
|
||||
dist: trusty
|
||||
sudo: required
|
||||
|
||||
before_install:
|
||||
# Install our SSH key pair
|
||||
- .travis/install_ssh_id.sh
|
||||
- unset SSH_ID
|
||||
# Register third-party APT repositories
|
||||
- sudo .travis/register_apt_repositories.sh
|
||||
# Install additional packages
|
||||
- sudo apt-get install -y cross-mint-essential dos2unix lftp
|
||||
# Display packages versions
|
||||
- git --version
|
||||
- make --version
|
||||
- ld --version
|
||||
- gcc --version
|
||||
- m68k-atari-mint-ld --version
|
||||
- m68k-atari-mint-gcc --version
|
||||
- tar --version
|
||||
- unix2dos --version
|
||||
- lftp --version
|
||||
|
||||
script:
|
||||
# Set FIXED_TRAVIS_COMMIT_RANGE
|
||||
- . .travis/fix_travis_commit_range.sh
|
||||
# Build binaries
|
||||
- export VERSION=$(date -u +%Y%m%d-%H%M%S)-$(git rev-parse --short $TRAVIS_COMMIT)
|
||||
- make clean
|
||||
- make all
|
||||
# Add README.txt
|
||||
- .travis/generate-readme.sh >release-archives/README.md
|
||||
# Display resulting tree
|
||||
- ls -l release-archives
|
||||
|
||||
deploy:
|
||||
skip_cleanup: true
|
||||
provider: script
|
||||
script: .travis/deploy.sh
|
||||
on:
|
||||
repo: firebee-org/BaS_gcc
|
||||
branch: master
|
||||
5
.travis/deploy.sh
Executable file
5
.travis/deploy.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash -eu
|
||||
# -e: Exit immediately if a command exits with a non-zero status.
|
||||
# -u: Treat unset variables as an error when substituting.
|
||||
|
||||
echo "no deployment step implemented (yet)"
|
||||
35
.travis/fix_travis_commit_range.sh
Normal file
35
.travis/fix_travis_commit_range.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
# This script fragment must be sourced by the main script file
|
||||
# in order to define the FIXED_TRAVIS_COMMIT_RANGE variable
|
||||
# . .travis/fix_travis_commit_range.sh
|
||||
|
||||
# TRAVIS_COMMIT_RANGE uses triple-dot syntax to specify which commits have
|
||||
# triggered the build. This is wrong. In case of forced push, the previous
|
||||
# commit is not an ancestor of the last commit, so it is not present in the
|
||||
# cloned repository. And also, the range contains unrelated commits.
|
||||
# https://docs.travis-ci.com/user/environment-variables/
|
||||
# https://git-scm.com/book/tr/v2/Git-Tools-Revision-Selection
|
||||
# https://github.com/travis-ci/travis-ci/issues/4596
|
||||
#
|
||||
# The solution is to use double-dot syntax instead.
|
||||
# In case of forced push, we can't know the previous commit. So we just use
|
||||
# the parent commit as previous one.
|
||||
|
||||
echo TRAVIS_COMMIT_RANGE=$TRAVIS_COMMIT_RANGE
|
||||
|
||||
PREVIOUS_COMMIT=$(echo $TRAVIS_COMMIT_RANGE | sed 's/\.\.\..*//')
|
||||
CURRENT_COMMIT=$TRAVIS_COMMIT
|
||||
|
||||
if ! git merge-base --is-ancestor $PREVIOUS_COMMIT $CURRENT_COMMIT 2>/dev/null
|
||||
then
|
||||
# Forced push: use parent commit as previous commit
|
||||
PREVIOUS_COMMIT=$CURRENT_COMMIT~
|
||||
fi
|
||||
|
||||
# Normalize commits
|
||||
PREVIOUS_COMMIT=$(git rev-parse --short $PREVIOUS_COMMIT)
|
||||
CURRENT_COMMIT=$(git rev-parse --short $CURRENT_COMMIT)
|
||||
|
||||
export FIXED_TRAVIS_COMMIT_RANGE=$PREVIOUS_COMMIT..$CURRENT_COMMIT
|
||||
echo FIXED_TRAVIS_COMMIT_RANGE=$FIXED_TRAVIS_COMMIT_RANGE
|
||||
|
||||
unset PREVIOUS_COMMIT CURRENT_COMMIT
|
||||
53
.travis/generate-purge.sh
Executable file
53
.travis/generate-purge.sh
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/bin/bash -u
|
||||
# -u: Treat unset variables as an error when substituting.
|
||||
|
||||
# Purpose: Purge old snapshots
|
||||
# Input: output of lftp "ls" command
|
||||
# Output: lftp "rm -r" commands
|
||||
|
||||
# Number of days of retention before purge
|
||||
days_retention=7
|
||||
|
||||
# But always keep a minimal number of snapshots
|
||||
min_keep=5
|
||||
|
||||
# Every snapshot up to this day will be purged
|
||||
last_day_purge=$(date -u +%Y%m%d --date "$days_retention days ago")
|
||||
|
||||
# Current number of snapshots kept
|
||||
n=0
|
||||
|
||||
# Read each remote file, as output from lftp "ls" command
|
||||
while read flags links user group size month day hour f
|
||||
do
|
||||
# Skip non-snapshots
|
||||
if [[ ! $f =~ ^[0-9]*-[0-9]*-[0-9a-z]* ]]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo $f
|
||||
|
||||
# Then reverse sort to have last snapshots first
|
||||
done | sort -r | while read f
|
||||
do
|
||||
# This is one more snapshot
|
||||
(( n++ ))
|
||||
|
||||
# Do not purge until minimal number of snapshots
|
||||
if [ $n -le $min_keep ]
|
||||
then
|
||||
echo "echo '#keep $f'"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Purge old snapshots
|
||||
day=$(echo $f | cut -d - -f 1)
|
||||
if [ $day -le $last_day_purge ]
|
||||
then
|
||||
echo "echo 'rm -r $f'"
|
||||
echo "rm -r $f"
|
||||
else
|
||||
echo "echo '#keep $f'"
|
||||
fi
|
||||
done
|
||||
20
.travis/generate-readme.sh
Executable file
20
.travis/generate-readme.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash -eu
|
||||
# -e: Exit immediately if a command exits with a non-zero status.
|
||||
# -u: Treat unset variables as an error when substituting.
|
||||
|
||||
# See .travis/fix_travis_commit_range.sh for details about the commit range.
|
||||
|
||||
# The argument for GitHub /compare/ requires 3 dots.
|
||||
COMPARE_ARG=$(echo $FIXED_TRAVIS_COMMIT_RANGE | sed 's/\.\./.../')
|
||||
|
||||
echo "These binaries have been produced by"
|
||||
echo "[Travis CI Build #$TRAVIS_BUILD_NUMBER](https://travis-ci.org/firebee-org/BaS_gcc/builds/$TRAVIS_BUILD_ID)"
|
||||
echo "for commits [$FIXED_TRAVIS_COMMIT_RANGE](https://github.com/firebee-org/BaS_gcc/compare/$COMPARE_ARG)."
|
||||
echo
|
||||
|
||||
# Generate log as preformatted text with hyperlinks
|
||||
git log --name-status $FIXED_TRAVIS_COMMIT_RANGE -- | sed \
|
||||
-e 's|.*|``&`` |' \
|
||||
-e 's|[a-z]\+://[^ `]*|``\[&\](&)``|g' \
|
||||
-e 's|commit \([0-9a-f]\+\)|commit`` \[\1\](https://github.com/firebee-org/BaS_gcc/commit/\1) ``|g' \
|
||||
-e 's|````||g'
|
||||
37
.travis/install_ssh_id.sh
Executable file
37
.travis/install_ssh_id.sh
Executable file
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash -eu
|
||||
# -e: Exit immediately if a command exits with a non-zero status.
|
||||
# -u: Treat unset variables as an error when substituting.
|
||||
|
||||
# This installs an SSH private/public key pair on the build system,
|
||||
# so ssh can connect to remote servers without password.
|
||||
# Important: for passwordless connection to succeed, our public key must be
|
||||
# manually authorized on the remote server.
|
||||
|
||||
# Our private key is the critical security component, it must remain secret.
|
||||
# We store it in the SSH_ID environment variable in Travis CI project settings.
|
||||
# As environment variables can only contain text, our key files are transformed
|
||||
# like this: tar, xz, base64. Then then can be decoded here. This is safe as
|
||||
# Travis CI never shows the contents of secure variables.
|
||||
|
||||
# To generate the contents of the SSH_ID variable:
|
||||
# Be sure to be in an empty, temporary directory.
|
||||
#
|
||||
# mkdir .ssh
|
||||
# ssh-keygen -t rsa -b 4096 -C travis-ci.org/firebee-org/BaS_gcc -N '' -f .ssh/id_rsa
|
||||
# tar Jcvf id_firebee-org_BaS_gcc.tar.xz .ssh
|
||||
# base64 -w 0 id_firebee-org_BaS_gcc.tar.xz
|
||||
#
|
||||
# Select the resulting encoded text (several lines) to copy it to the clipboard.
|
||||
# Then go to the Travis CI project settings:
|
||||
# https://travis-ci.org/firebee-org/BaS_gcc/settings
|
||||
# Create a new environment variable named SSH_ID, and paste the value.
|
||||
# The script below will recreate the key files from that variable contents.
|
||||
|
||||
if [ -z ${SSH_ID+x} ]
|
||||
then
|
||||
echo "error: SSH_ID is undefined" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $SSH_ID | base64 -d | tar -C ~ -Jx
|
||||
ls -l ~/.ssh
|
||||
19
.travis/register_apt_repositories.sh
Executable file
19
.travis/register_apt_repositories.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/bash -eu
|
||||
# -e: Exit immediately if a command exits with a non-zero status.
|
||||
# -u: Treat unset variables as an error when substituting.
|
||||
|
||||
if [ $UID != 0 ]
|
||||
then
|
||||
echo "error: This script needs to be run with root access rights." 2>&1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Display expanded script commands
|
||||
set -x
|
||||
|
||||
# Vincent Rivière's m68k-atari-mint cross-tools
|
||||
# http://vincent.riviere.free.fr/soft/m68k-atari-mint/ubuntu.php
|
||||
sudo add-apt-repository -y ppa:vriviere/ppa
|
||||
|
||||
# Update the packages list
|
||||
apt-get update -qq
|
||||
Reference in New Issue
Block a user