#507 Emit location keys in nightly compose fedmsgs, plus related cleanups (f26)
Merged 6 years ago by mohanboddu. Opened 6 years ago by adamwill.
adamwill/pungi-fedora 26-fedmsg-destination  into  f26

file modified
+28 -26
@@ -12,19 +12,16 @@ 

  SKIP_PHASES="--skip-phase=productimg --skip-phase=pkgset --skip-phase=gather --skip-phase=extra_files --skip-phase=creatrepo"

  DEST=$(pwd)

  DATE=$(date "+%Y%m%d")

- DIST="26"

- BRANCHED="26"

- BRANCH="branched"

+ # the Pungi 'shortname', which we will include in fedmsgs for disambiguation

+ SHORT="Fedora-Cloud"

+ RELEASE="26"

+ RELEASE_TITLE="26"

  COMPSFILE="comps-f26.xml"

- GIT_BRANCH="f26"

- TMPDIR=`mktemp -d /tmp/$DIST.$DATE.XXXX`

+ TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`

  TOMAIL="devel@lists.fedoraproject.org test@lists.fedoraproject.org"

  FROM="Fedora Branched Report <rawhide@fedoraproject.org>"

  RSYNCPREFIX="sudo -u ftpsync"

- ATOMIC=$(mktemp -d /tmp/atomic.${DIST}.$DATE.XXXX)

- ATOMICREPO="/mnt/koji/compose/atomic/$BRANCHED/"

- ATOMICDEST="/mnt/koji/atomic/$BRANCHED/"

- OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-26/COMPOSE_ID)

+ OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  # uncomment and edit for resuming a failed compose

  #COMPOSE_ID="Fedora-23-20150530.n.0"

  # assume a releng dir is a git checkout of the releng repo
@@ -37,13 +34,12 @@ 

      git clone https://pagure.io/releng.git

  fi

  # Set up our fedmsg function, using the releng repo definition

- fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

- fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")

  FEDMSG_MODNAME="compose"

  FEDMSG_CERTPREFIX="releng"

  . ./releng/scripts/fedmsg-functions.sh

  # Announce that we are starting, even though we don't know the compose_id yet..

- send_fedmsg "${fedmsg_json_start}" ${DIST} start

+ send_fedmsg "${fedmsg_json_start}" ${RELEASE} start

  pushd $TMPDIR

  git clone https://pagure.io/fedora-comps.git && {

      pushd fedora-comps
@@ -59,29 +55,35 @@ 

      CMD="$CMD --debug-mode --compose-dir=$TARGET_DIR/$COMPOSE_ID"

  fi

  time $CMD "$@"

- if [ "$?" = "0" ]; then

-    export mail=0

+ if [ "$?" != "0" ]; then

+     exit 1

  fi

- NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-26/COMPOSE_ID)

+ 

+ NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')

+ 

  # Set this to use later for a few items include depcheck

  DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID

+ # Public URL the compose will wind up at, we put it in fedmsgs

+ LOCATION=$(echo $DESTDIR|sed -e 's,/mnt/koji,https://kojipkgs.fedoraproject.org,g')

+ # Update fedmsg template

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID", "$LOCATION")

+ fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID" "$LOCATION")

+ 

  $RSYNCPREFIX mkdir -p $DESTDIR

  # Tell interested persons that the rsync is starting (zomg!)

- send_fedmsg "${fedmsg_json_start}" ${DIST} rsync.start

+ #send_fedmsg "${fedmsg_json_start}" ${RELEASE} rsync.start

  #for dir in CloudImage metadata ;

  #  do

- #    $RSYNCPREFIX rsync -avhH $TARGET_DIR/$NEWCOMPOSE_ID/compose/$dir/ /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/$dir/ ;

+ #    $RSYNCPREFIX rsync -avhH $DESTDIR/compose/$dir/ /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/$dir/ ;

  #  done

  # Tell interested persons that the rsync is done.

- #send_fedmsg "${fedmsg_json_done}" ${DIST} rsync.complete

+ #send_fedmsg "${fedmsg_json_done}" ${RELEASE} rsync.complete

  # Tell everyone by fedmsg about the compose

- send_fedmsg "${fedmsg_json_done}" ${DIST} complete

+ send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete

  # Tell everyone by email about the compose

- SUBJECT='Fedora '$DIST' compose report: '$SHORTCOMPOSE_ID' changes'

- #if [ "$mail" = "0" ]; then

- #    for tomail in $TOMAIL ; do

- #        cat $TARGET_DIR/$NEWCOMPOSE_ID/logs/*verbose $DESTDIR/logs/depcheck | \

- #             mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

- #    done

- #fi

+ SUBJECT='Fedora '$RELEASE' compose report: '$SHORTCOMPOSE_ID' changes'

+ #for tomail in $TOMAIL ; do

+ #    cat $DESTDIR/logs/*verbose $DESTDIR/logs/depcheck | \

+ #         mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

+ #done

file modified
+29 -26
@@ -11,19 +11,16 @@ 

  SKIP_PHASES="--skip-phase=productimg --skip-phase=pkgset --skip-phase=gather --skip-phase=extra_files --skip-phase=creatrepo"

  DEST=$(pwd)

  DATE=$(date "+%Y%m%d")

- DIST="26"

- BRANCHED="26"

- BRANCH="branched"

+ # the Pungi 'shortname', which we will include in fedmsgs for disambiguation

+ SHORT="Fedora-Docker"

+ RELEASE="26"

+ RELEASE_TITLE="26"

  COMPSFILE="comps-f26.xml"

- GIT_BRANCH="f26"

- TMPDIR=`mktemp -d /tmp/$DIST.$DATE.XXXX`

+ TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`

  TOMAIL="devel@lists.fedoraproject.org test@lists.fedoraproject.org"

  FROM="Fedora Branched Report <rawhide@fedoraproject.org>"

  RSYNCPREFIX="sudo -u ftpsync"

- ATOMIC=$(mktemp -d /tmp/atomic.${DIST}.$DATE.XXXX)

- ATOMICREPO="/mnt/koji/compose/atomic/$BRANCHED/"

- ATOMICDEST="/pub/fedora/linux/atomic/$BRANCHED/"

- OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora_Docker-26/COMPOSE_ID)

+ OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  # uncomment and edit for resuming a failed compose

  #COMPOSE_ID="Fedora-23-20150530.n.0"

  # assume a releng dir is a git checkout of teh releng repo
@@ -36,13 +33,12 @@ 

      git clone https://pagure.io/releng.git

  fi

  # Set up our fedmsg function, using the releng repo definition

- fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

- fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")

  FEDMSG_MODNAME="compose"

  FEDMSG_CERTPREFIX="releng"

  . ./releng/scripts/fedmsg-functions.sh

  # Announce that we are starting...

- send_fedmsg "${fedmsg_json_start}" ${DIST} start

+ send_fedmsg "${fedmsg_json_start}" ${RELEASE} start

  pushd $TMPDIR

  git clone https://pagure.io/fedora-comps.git && {

      pushd fedora-comps
@@ -58,27 +54,34 @@ 

      CMD="$CMD --debug-mode --compose-dir=$TARGET_DIR/$COMPOSE_ID"

  fi

  time $CMD "$@"

- if [ "$?" = "0" ]; then

-    export mail=0

+ if [ "$?" != "0" ]; then

+     exit 1

  fi

- NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora_Docker-26/COMPOSE_ID)

+ 

+ NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')

+ 

+ # Set this to use later for a few items include depcheck

  DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID

+ # Public URL the compose will wind up at, we put it in fedmsgs

+ LOCATION=$(echo $DESTDIR|sed -e 's,/mnt/koji,https://kojipkgs.fedoraproject.org,g')

+ # Update fedmsg template

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID", "$LOCATION")

+ fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID" "$LOCATION")

+ 

  $RSYNCPREFIX mkdir -p $DESTDIR

  # Tell interested persons that the rsync is starting (zomg!)

- send_fedmsg "${fedmsg_json_start}" ${DIST} rsync.start

+ #send_fedmsg "${fedmsg_json_start}" ${RELEASE} rsync.start

  #for dir in Docker metadata ;

  #  do

- #    $RSYNCPREFIX rsync -avhH $TARGET_DIR/$NEWCOMPOSE_ID/compose/$dir/ /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/$dir/ ;

+ #    $RSYNCPREFIX rsync -avhH $DESTDIR/compose/$dir/ /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/$dir/ ;

  #  done

  # Tell interested persons that the rsync is done.

- #send_fedmsg "${fedmsg_json_done}" ${DIST} rsync.complete

+ #send_fedmsg "${fedmsg_json_done}" ${RELEASE} rsync.complete

  # Tell everyone by fedmsg about the compose

- send_fedmsg "${fedmsg_json_done}" ${DIST} complete

- SUBJECT='Fedora '$DIST' compose report: '$SHORTCOMPOSE_ID' changes'

- #if [ "$mail" = "0" ]; then

- #    for tomail in $TOMAIL ; do

- #        cat $TARGET_DIR/$NEWCOMPOSE_ID/logs/*verbose $DESTDIR/logs/depcheck | \

- #             mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

- #    done

- #fi

+ send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete

+ SUBJECT='Fedora '$RELEASE' compose report: '$SHORTCOMPOSE_ID' changes'

+ #for tomail in $TOMAIL ; do

+ #    cat $DESTDIR/logs/*verbose $DESTDIR/logs/depcheck | \

+ #         mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

+ #done

file modified
+20 -15
@@ -10,18 +10,15 @@ 

  SKIP_PHASES="--skip-phase=productimg"

  DEST=$(pwd)

  DATE=$(date "+%Y%m%d")

- DIST="26"

- BRANCHED="Modular-26"

- BRANCH="branched"

- GIT_BRANCH="f26"

- TMPDIR=`mktemp -d /tmp/$DIST.$DATE.XXXX`

+ SHORT="Fedora-Modular"

+ RELEASE="26"

+ RELEASE_TITLE="26"

+ COMPSFILE="comps-f26.xml"

+ TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`

  TOMAIL="devel@lists.fedoraproject.org test@lists.fedoraproject.org"

  FROM="Fedora Branched Report <rawhide@fedoraproject.org>"

  RSYNCPREFIX="sudo -u ftpsync"

- ATOMIC=$(mktemp -d /tmp/atomic.${DIST}.$DATE.XXXX)

- ATOMICREPO="/mnt/koji/compose/atomic/$BRANCHED/"

- ATOMICDEST="/mnt/koji/atomic/$BRANCHED/"

- OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-Modular-26/COMPOSE_ID)

+ OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  

  # assume a releng dir is a git checkout of the releng repo

  # if it does not exist clone it
@@ -39,7 +36,8 @@ 

  . ./releng/scripts/fedmsg-functions.sh

  

  # Announce that we are starting, even though we don't know the compose_id yet..

- send_fedmsg "${fedmsg_json_start}" ${DIST} start

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")

+ send_fedmsg "${fedmsg_json_start}" ${RELEASE} start

  

  CMD="pungi-koji --config=$CONFIG --old-composes=$TARGET_DIR $OLD_COMPOSES_DIR $NIGHTLY $SKIP_PHASES"

  
@@ -50,14 +48,21 @@ 

  fi

  

  time $CMD "$@"

+ if [ "$?" != "0" ]; then

+     exit 1

+ fi

  

- NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-Modular-26/COMPOSE_ID)

+ NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-Modular.*-||g')

- fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "compose_id": "%s"}' "$BRANCHED" "$ARCH" "$NEWCOMPOSE_ID")

- fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s", "compose_id": "%s"}' "$BRANCHED" "$ARCH" "$NEWCOMPOSE_ID")

+ # Public URL the compose will wind up at, we put it in fedmsgs

+ LOCATION=$(echo "$TARGET_DIR/$NEWCOMPOSE_ID"|sed -e 's,/mnt/koji,https://kojipkgs.fedoraproject.org,g')

+ 

+ # Update fedmsg template

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID", "$LOCATION")

+ fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID" "$LOCATION")

  

  # Tell everyone by fedmsg about the compose

- send_fedmsg "${fedmsg_json_done}" ${DIST} complete

+ send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete

  

  # Remove old composes older than 14 days

- find $TARGET_DIR/Fedora-Modular-26*  -xdev -depth -maxdepth 2 -mtime +14  -exec rm -rf {} \;

+ find $TARGET_DIR/$SHORT-$RELEASE_TITLE*  -xdev -depth -maxdepth 2 -mtime +14  -exec rm -rf {} \;

file modified
+30 -27
@@ -11,19 +11,17 @@ 

  SKIP_PHASES="--skip-phase=productimg --skip-phase=extra_files"

  DEST=$(pwd)

  DATE=$(date "+%Y%m%d")

- DIST="26"

- BRANCHED="26"

- BRANCH="branched"

+ # the Pungi 'shortname', which we will include in fedmsgs for disambiguation

+ SHORT="Fedora-Atomic"

+ RELEASE="26"

+ RELEASE_TITLE="26"

  COMPSFILE="comps-f26.xml"

- GIT_BRANCH="f26"

- TMPDIR=`mktemp -d /tmp/$DIST.$DATE.XXXX`

+ TMPDIR=`mktemp -d /tmp/$RELEASE.$DATE.XXXX`

  TOMAIL="devel@lists.fedoraproject.org test@lists.fedoraproject.org"

  FROM="Fedora Branched Report <rawhide@fedoraproject.org>"

  RSYNCPREFIX="sudo -u ftpsync"

- ATOMIC=$(mktemp -d /tmp/atomic.${DIST}.$DATE.XXXX)

- ATOMICREPO="/mnt/koji/compose/atomic/$BRANCHED/"

- ATOMICDEST="/pub/fedora/linux/atomic/$BRANCHED/"

- OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-Atomic-26/COMPOSE_ID)

+ RSYNCTARGET="/pub/alt/atomic/testing/$SHORTCOMPOSE_ID"

+ OLDCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  # uncomment and edit for resuming a failed compose

  #COMPOSE_ID="Fedora-23-20150530.n.0"

  # assume a releng dir is a git checkout of teh releng repo
@@ -36,13 +34,12 @@ 

      git clone https://pagure.io/releng.git

  fi

  # Set up our fedmsg function, using the releng repo definition

- fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

- fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s"}' "$BRANCHED" "$ARCH")

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s"}' "$RELEASE" "$ARCH" "$SHORT")

  FEDMSG_MODNAME="compose"

  FEDMSG_CERTPREFIX="releng"

  . ./releng/scripts/fedmsg-functions.sh

  # Announce that we are starting...

- send_fedmsg "${fedmsg_json_start}" ${DIST} start

+ send_fedmsg "${fedmsg_json_start}" ${RELEASE} start

  pushd $TMPDIR

  git clone https://pagure.io/fedora-comps.git && {

      pushd fedora-comps
@@ -58,28 +55,34 @@ 

      CMD="$CMD --debug-mode --compose-dir=$TARGET_DIR/$COMPOSE_ID"

  fi

  time $CMD "$@"

- if [ "$?" = "0" ]; then

-    export mail=0

+ if [ "$?" != "0" ]; then

+     exit 1

  fi

- NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-Fedora-Atomic-26/COMPOSE_ID)

+ 

+ NEWCOMPOSE_ID=$(cat $TARGET_DIR/latest-$SHORT-$RELEASE_TITLE/COMPOSE_ID)

  SHORTCOMPOSE_ID=$(echo $NEWCOMPOSE_ID|sed -e 's|Fedora-.*-||g')

+ 

  DESTDIR=$TARGET_DIR/$NEWCOMPOSE_ID

+ # Public URL the synced compose will wind up at, we put it in fedmsgs

+ LOCATION="https://dl.fedoraproject.org$RSYNCTARGET"

+ # Update fedmsg template

+ fedmsg_json_start=$(printf '{"log": "start", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID", "$LOCATION")

+ fedmsg_json_done=$(printf '{"log": "done", "branch": "%s", "arch": "%s", "short": "%s", "compose_id": "%s", "location": "%s"}' "$RELEASE" "$ARCH" "$SHORT" "$NEWCOMPOSE_ID" "$LOCATION")

+ 

  $RSYNCPREFIX mkdir -p $DESTDIR

  # Tell interested persons that the rsync is starting (zomg!)

- send_fedmsg "${fedmsg_json_start}" ${DIST} rsync.start

+ send_fedmsg "${fedmsg_json_start}" ${RELEASE} rsync.start

  for dir in Atomic CloudImages Docker metadata ;

    do

-     $RSYNCPREFIX rsync -avhH $TARGET_DIR/$NEWCOMPOSE_ID/compose/$dir/ /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/$dir/ ;

-     $RSYNCPREFIX ./releng/scripts/build_composeinfo /pub/alt/atomic/testing/$SHORTCOMPOSE_ID/ --name $NEWCOMPOSE_ID

+     $RSYNCPREFIX rsync -avhH $DESTDIR/compose/$dir/ "$RSYNCTARGET/$dir/" ;

+     $RSYNCPREFIX ./releng/scripts/build_composeinfo "$RSYNCTARGET/" --name $NEWCOMPOSE_ID

    done

  # Tell interested persons that the rsync is done.

- send_fedmsg "${fedmsg_json_done}" ${DIST} rsync.complete

+ send_fedmsg "${fedmsg_json_done}" ${RELEASE} rsync.complete

  # Tell everyone by fedmsg about the compose

- send_fedmsg "${fedmsg_json_done}" ${DIST} complete

- SUBJECT='Fedora '$DIST' compose report: '$SHORTCOMPOSE_ID' changes'

- #if [ "$mail" = "0" ]; then

- #    for tomail in $TOMAIL ; do

- #        cat $TARGET_DIR/$NEWCOMPOSE_ID/logs/*verbose $DESTDIR/logs/depcheck | \

- #             mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

- #    done

- #fi

+ send_fedmsg "${fedmsg_json_done}" ${RELEASE} complete

+ SUBJECT='Fedora '$RELEASE' compose report: '$SHORTCOMPOSE_ID' changes'

+ #for tomail in $TOMAIL ; do

+ #    cat $DESTDIR/logs/*verbose $DESTDIR/logs/depcheck | \

+ #         mutt -e "set from=\"$FROM\"" -e 'set envelope_from=yes' -s "$SUBJECT" $tomail

+ #done

This is basically https://pagure.io/pungi-fedora/pull-request/504 for the f26 branch. We're still doing cloud/docker/atomic nightlies for f26, so we need it here too...

Pull-Request has been merged by mohanboddu

6 years ago