Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      CodeSOD: A Unique Way to Primary Key

      July 22, 2025

      BrowserStack launches Figma plugin for detecting accessibility issues in design phase

      July 22, 2025

      Parasoft brings agentic AI to service virtualization in latest release

      July 22, 2025

      Node.js vs. Python for Backend: 7 Reasons C-Level Leaders Choose Node.js Talent

      July 21, 2025

      The best CRM software with email marketing in 2025: Expert tested and reviewed

      July 22, 2025

      This multi-port car charger can power 4 gadgets at once – and it’s surprisingly cheap

      July 22, 2025

      I’m a wearables editor and here are the 7 Pixel Watch 4 rumors I’m most curious about

      July 22, 2025

      8 ways I quickly leveled up my Linux skills – and you can too

      July 22, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      The Intersection of Agile and Accessibility – A Series on Designing for Everyone

      July 22, 2025
      Recent

      The Intersection of Agile and Accessibility – A Series on Designing for Everyone

      July 22, 2025

      Zero Trust & Cybersecurity Mesh: Your Org’s Survival Guide

      July 22, 2025

      Execute Ping Commands and Get Back Structured Data in PHP

      July 22, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      A Tomb Raider composer has been jailed — His legacy overshadowed by $75k+ in loan fraud

      July 22, 2025
      Recent

      A Tomb Raider composer has been jailed — His legacy overshadowed by $75k+ in loan fraud

      July 22, 2025

      “I don’t think I changed his mind” — NVIDIA CEO comments on H20 AI GPU sales resuming in China following a meeting with President Trump

      July 22, 2025

      Galaxy Z Fold 7 review: Six years later — Samsung finally cracks the foldable code

      July 22, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: Back Up for a Moment

    CodeSOD: Back Up for a Moment

    July 14, 2025

    James‘s team has a pretty complicated deployment process implemented as a series of bash scripts. The deployment is complicated, the scripts doing the deployment are complicated, and failures mid-deployment are common. That means they need to gracefully roll back, and they way they do that is by making backup copies of the modified files.

    This is how they do that.

    DATE=`date '+%Y%m%d'`
    BACKUPDIR=`dirname ${DESTINATION}`/backup
    if [ ! -d $BACKUPDIR ]
    then
            echo "Creating backup directory ..."
            mkdir -p $BACKUPDIR
    fi
    FILENAME=`basename ${DESTINATION}`
    BACKUPFILETYPE=${BACKUPDIR}/${FILENAME}.${DATE}
    BACKUPFILE=${BACKUPFILETYPE}-1
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-2 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-3 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-4 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-5 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-6 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-7 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-8 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then BACKUPFILE=${BACKUPFILETYPE}-9 ; fi
    if [ -f ${BACKUPFILE} ] || [ -f ${BACKUPFILE}.gz ] ; then
    cat <<EOF
    You have already had 9 rates releases in one day.
    
    ${BACKUPFILE} already exists, do it manually !!!
    EOF
    exit 2
    fi
    

    Look, I know that loops in bash can be annoying, but they’re not that annoying.

    This code creates a backup directory (if it doesn’t already exist), and then creates a file name for the file we’re about to backup, in the form OriginalName.Ymd-n.gz. It tests to see if this file exists, and if it does, it increments n by one. It does this until either it finds a file name that doesn’t exist, or it hits 9, at which point it gives you a delightfully passive aggressive message:

    You have already had 9 rates releases in one day.
    ${BACKUPFILE} already exists, do it manually !!!

    Yeah, do it manually. Now, admittedly, I don’t think a lot of folks want to do more than 9 releases in a given day, but there’s no reason why they couldn’t just keep trying until they find a good filename. Or even better, require each release to have an identifier (like the commit or build number or whatever) and then use that for the filenames.

    Of course, just fixing this copy doesn’t address the real WTF, because we laid out the real WTF in the first paragraph: deployment is a series of complicated bash scripts doing complicated steps that can fail all the time. I’ve worked in places like that, and it’s always a nightmare. There are better tools! Our very own Alex has his product, of course, but there are a million ways to get your builds repeatable and reliable that don’t involve BuildMaster but also don’t involve fragile scripts. Please, please use one of those.

    [Advertisement] Plan Your .NET 9 Migration with Confidence
    Your journey to .NET 9 is more than just one decision.Avoid migration migraines with the advice in this free guide. Download Free Guide Now!

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleCritical Vulnerability in Anthropic’s MCP Exposes Developer Machines to Remote Exploits
    Next Article Rilasciata GParted Live Live 1.7.0-8: Essenziale per la Gestione delle Partizioni

    Related Posts

    News & Updates

    The best CRM software with email marketing in 2025: Expert tested and reviewed

    July 22, 2025
    News & Updates

    This multi-port car charger can power 4 gadgets at once – and it’s surprisingly cheap

    July 22, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    This 2-in-1 wireless charger simplified my workspace (and freed me from the cables)

    News & Updates

    CVE-2025-5152 – “Chanjet CRM SQL Injection Vulnerability”

    Common Vulnerabilities and Exposures (CVEs)

    CVE-2025-6337 – TOTOLINK A3002R/A3002RU HTTP POST Request Handler Buffer Overflow

    Common Vulnerabilities and Exposures (CVEs)

    Fake Security Plugin on WordPress Enables Remote Admin Access for Attackers

    Development

    Highlights

    Windows 11 KB5055629 adds Android Send File to the Start menu, improves File Explorer

    April 23, 2025

    Windows 11 KB5055629 23H2 is now available for everyone with a new Phone Link companion…

    U.S. Sanctions Funnull for $200M Romance Baiting Scams Tied to Crypto Fraud

    May 30, 2025

    L’ambiente desktop COSMIC sbarca su Void Linux

    July 5, 2025

    Kingdom Come: Deliverance 2’s developer is about to get a whole lot bigger, and I can’t wait to see its next game

    June 4, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.